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

您可能在 Web 浏览器中以这种简写形式输入这些 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 地址。

相关内容