为什么在 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 页面。
执行以下步骤:
- 在
/var/www/html/site2.com
中添加一个 html 页面。
- 为 site2 创建一个配置文件并将其指向服务器块中的 html 页面。
- 安装 SSL。
- 重启 Nginx。
您的问题发生的另一个原因是 SSL。因此,请确保通过将 SSL 重新安装到 site2 来重试。
有关详细信息,请参阅 this and this。
好的,所以我的 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 页面。
执行以下步骤:
- 在
/var/www/html/site2.com
中添加一个 html 页面。 - 为 site2 创建一个配置文件并将其指向服务器块中的 html 页面。
- 安装 SSL。
- 重启 Nginx。
您的问题发生的另一个原因是 SSL。因此,请确保通过将 SSL 重新安装到 site2 来重试。
有关详细信息,请参阅 this and this。