为什么在 Ubuntu 中使用 Nginx 后一个域显示另一个域的 html 页面?

Why does one domain shows another domain's html page after using Nginx in Ubuntu?

好的,所以我的 Ubuntu VPS 中有一个不寻常的问题。访问一个域会显示另一个域的静态 html 页面。让我们看看配置文件。

假设我有一个域名为:site1.com 的网站。该域在子域中有 2 个应用程序 运行:app1.site1.com 和 app2.site1.com。主页没有任何应用程序,只有一个简单的 html 页面,上面写着:

'Welcome to Site 1. This site is currently under maintenance!'.

这 运行 完全符合我的要求,但是在我从 Namecheap 指向我的 VPS 的新域(让我们称他为 site2.com)后出现了问题。现在当我访问 site2.com 时,我可以看到:

'Welcome to Site 1. This site is currently under maintenance!'.

那是真正的伏都教魔法。

site1 nginx 配置文件如下所示:

server {
        root /var/www/html/site1.com;

        index index.html index.htm index.nginx-debian.html;

        server_name site1.com www.site1.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

server {
        root /var/www/app1.site1.com;

        index index.html index.htm index.nginx-debian.html;

        server_name app1.site1.com;

        location / {
                #try_files $uri $uri/ =404;
                proxy_pass http://localhost:4000;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $http_x_forwarded_for;
                proxy_cache_bypass $http_upgrade;
        }
}

server {
        root /var/www/app2.site1.com;

        index index.html index.htm index.nginx-debian.html;

        server_name app2.site1.com;

        location / {
                #try_files $uri $uri/ =404;
                proxy_pass http://localhost:5000;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $http_x_forwarded_for;
                proxy_cache_bypass $http_upgrade;
        }
}

html 文件在 /var/www/html/site1.com/index.html

魔术的原因是什么?

我也尝试过为新域创建一个新的 nginx 文件并创建一个新的服务器块并指向它自己的 html 文件,但它只是没有显示 html 页面而不是 site1 页面。

如果有人指出正确的方向,那将非常有帮助。

这通常发生在 Nginx 无法为显示另一个页面的域找到服务器块时。所以 Nginx 自动提供第一个可用的配置文件,在你的情况下是 site1 的页面。

为避免这种情况,您可以使用以下配置在 nginx.conf 文件中设置默认服务器:

server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name _;
    ssl_certificate <path to cert>
    ssl_certificate_key <path to key>
    return 404;
}

当 Nginx 找不到任何与您的域匹配的服务器块时,它将自动提供一个 404 页面。

执行以下步骤:

  1. /var/www/html/site2.com 中添加一个 html 页面。
  2. 为 site2 创建一个配置文件并将其指向服务器块中的 html 页面。
  3. 安装 SSL。
  4. 重启 Nginx。

您的问题发生的另一个原因是 SSL。因此,请确保通过将 SSL 重新安装到 site2 来重试。

有关详细信息,请参阅 this and this