我正在尝试在我的 Ubuntu 16.04 VPS 上托管朋友的网站。
我自己在 sub1.mydomain.com、sub2.mydomain.com 等有多个网站。这些都是 nodejs 应用程序,每个应用程序在单独的文件中都有一个代理传递设置,如下所示:
server
{
server_name sub1.mydomain.com;
location /
{
proxy_pass http://localhost:APP_PORT;
include /etc/nginx/proxy_params;
}
}
proxy_params 文件包含一堆我从一些教程中复制过来的东西:
proxy_buffers 16 32k;
proxy_buffer_size 64k;
proxy_busy_buffers_size 128k;
proxy_cache_bypass $http_pragma $http_authorization;
proxy_connect_timeout 59s;
proxy_hide_header X-Powered-By;
proxy_http_version 1.1;
proxy_ignore_headers Cache-Control Expires;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;
proxy_no_cache $http_pragma $http_authorization;
proxy_pass_header Set-Cookie;
proxy_read_timeout 600;
proxy_redirect off;
proxy_send_timeout 600;
proxy_temp_file_write_size 64k;
proxy_set_header Accept-Encoding '';
proxy_set_header Cookie $http_cookie;
proxy_set_header Host $host;
proxy_set_header Proxy '';
proxy_set_header Referer $http_referer;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Original-Request $request_uri;
这对我有用。
现在,我正尝试将我朋友的域名(her-domain.com)指向我的服务器上的另一个节点应用程序以托管她的网站。
server
{
server_name her-domain.com;
location /
{
proxy_pass http://localhost:HER_APP_PORT;
include /etc/nginx/proxy_params;
}
}
有趣的是,这似乎不能正常工作。如果我在计算机上使用谷歌 DNS (8.8.8.8),我可以顺利访问反向代理到该域的应用程序,并在浏览器中查看它所服务的网站。但如果我使用默认 DNS,nginx 将提供 404 页面。
由于我可以通过该域访问服务器,并且 nginx 提供该 404,因此我假设这是 nginx 配置问题。我对这方面还不熟悉,不知道如何调试。
答案1
这与 DNS 无关。
问题在于 nginx 配置无法正确处理 IPv6 请求。将配置更改为
server
{
server_name her-domain.com;
listen 80;
listen [::]:80;
location /
{
proxy_pass http://localhost:APP_PORT;
include /etc/nginx/proxy_params;
}
}
修复了一些东西。