Apache「劫持」了 Nginx 的 URL

Apache「劫持」了 Nginx 的 URL

我有一個運行 Apache 的 Ubuntu 伺服器,它託管一個 Wordpress 站點,可以使用 HTTP 存取該站點。也安裝了 Nginx,它託管一個只能使用 HTTPS 存取的 Django 網站。

現在,我想完成的是,example.comwww.example.com前往 Apache 託管的 Wordpress,同時api.example.com前往 Nginx 託管的 Django。如果我只是嘗試訪問 的主頁,這目前確實有效api.example.com,但有一個奇怪的問題:當我嘗試訪問api.example.com/admin(Django 管理面板)時,頁面會重定向到 的 WordPress 管理登錄頁面www.example.com/wp-admin。這是為什麼?

我甚至嘗試將 Django 管理面板 URL 更改為其他內容。這又會導致 Wordpress 404 頁面(「哎呀,找不到該頁面!」)。

因此,網域後面的 URL 部分似乎被 Apache 劫持,即使它位於不同的子網域上。造成這種情況的原因是什麼?

Apache 網站的設定如下:

<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot /var/www/wp

    <Directory /var/www/wp>
        Options Indexes FollowSymlinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

Nginx 站台的設定如下:

upstream app_server {
    server unix:/tmp/gunicorn.sock fail_timeout=0;
}

server {
    listen 443 ssl;
    charset utf-8;
    server_name api.example.com;

    ssl on;
    # Here be a lot of SSL configs

    location / {
        try_files $uri @proxy_to_app;
    }

    location @proxy_to_app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://app_server;
    }

    location /static {
        root /var/www/django/static;
    }
}

最後,我的 DNS 記錄設定如下:

A example.com 1.2.3.4
CNAME api example.com
CNAME www example.com

提前感謝您的幫助。如果您需要更多信息,請與我們聯繫。

答案1

您可能在網頁瀏覽器中以這種速記形式輸入這些 URL,但它並沒有正確猜測您想要什麼;它可能從歷史記錄中記住,當您輸入“api.example.com”時,它應該使用HTTPS,但對於新URL“api.example.com/whatever”,它沒有歷史記錄,因此它首先嘗試HTTP 。

如果您使用相同的 IP 位址來執行所有這些操作,則無論事實為何https://api.example.com/* 正在監聽 HTTPS 連接埠 (443) 的進程,http://api.example.com/* 仍會前往監聽 HTTP 連接埠 (80) 的進程。

如果您想在保持相同 IP 位址的同時避免這種情況,請在純 HTTP 伺服器中設定 api.example.com 虛擬主機,將其收到的每個請求重新導向至 HTTPS。

要真正以困難的方式將它們分開,請將api.example.com 的新IP 位址新增至伺服器,並使兩個HTTP(S) 伺服器各自偵聽自己的IP,並更新DNS,以便api.example. com 指向新的IP位址。

相關內容