我在Digital Ocean上有两个水滴。一个带有nginx的负载均衡器和一个带有nginx反向代理的节点/快速网络服务器。我们称之为load-1和web-1。 load-1处理SSL终止并通过nginx上游模块将请求转发到web-1,通过数字海洋提供的私人网络http。
当访问web-1上的公共IP时,一切正常。通过load-1访问时,我只收到404。我已经验证了请求实际上已转发到web-1,这是web-1的nginx访问日志在从load-1收到的每个请求中显示的内容:
load-1.private.ip - [09 / Jan / 2017:13:14:00 + 0000]" GET / HTTP / 1.0" 404 580" - " >" Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.36(KHTML,与Gecko一样)> Chrome / 55.0.2883.87 Safari / 537.36"
为什么转发请求在直接请求有效时无效?由于web-1在直接访问时工作,因此我将请求从load-1转发到web-1一定有问题吗?
我在装载1上的nginx配置:
upstream web-servers {
server web-1.private.ip;
}
server {
listen 80;
listen 443 ssl;
server_name mydomain.com;
ssl on;
ssl_certificate /etc/ssl/mycert.crt;
ssl_certificate_key /etc/ssl/mykey.key;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security "max-age=31536000";
location / {
proxy_pass http://web-servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
我在web-1上的nginx配置:
server {
listen 80;
server_name web-1.public.ip web-1.private.ip;
location / {
proxy_pass http://127.0.0.1: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 $remote_addr;
proxy_cache_bypass $http_upgrade;
}
}
答案 0 :(得分:1)
简单地说,web-1上的Nginx不知道要使用什么配置。
Nginx looks at the host header确定要使用的服务器配置。您已在load-1的代理设置中将主机设置为mydomain.com
,但在web-1上没有mydomain.com
的相应条目。
要么
default_server
标记(通过将listen 80;
指令更改为listen 80 default_server;
)server
块,这是唯一的块(导致Nginx将其视为默认服务器)mydomain.com
添加到server_name
列表