为什么https://robert.bob.com/norbert/使用此配置转到后端 1 而不是后端 2 吗?
server {
server_name robert.bob.com;
rewrite ^/(.*) https://robert.bob.com/$1 permanent;
}
server {
listen 443 ssl;
ssl on;
ssl_certificate conf.d/test_combined.crt;
ssl_certificate_key conf.d/star.bob.com.key;
ssl_client_certificate conf.d/gd_bundle.crt;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:EDH-RSA-DES-CBC3-SHA:AES256-SHA:DES-CBC3-SHA:AES128-SHA:RC4-SHA:RC4-MD5:!kEDH;
ssl_prefer_server_ciphers on;
server_name robert.bob.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $host;
location / {
auth_pam "Danger Zone";
auth_pam_service_name "nginx";
proxy_pass http://backend1.bob.com:8080/;
}
location /norbert/ {
auth_pam "Danger Zone";
auth_pam_service_name "nginx";
proxy_pass http://backend2.bob.com:8080/;
}
}
答案1
由于您完全改变了您的问题,我原来的答案(底部)不再适用。
但有一个原因https://robert.bob.com/norbert/转到 backend1 而不是 backend2 可能是因为 backend1.bob.com 和 backend2.bob.com 解析为运行 nginx 代理的机器上的同一个 IP。
我认为这部分可能也有错(我对此不是 100% 确定),它可能需要 listen 80 指令。
server {
server_name robert.bob.com;
rewrite ^/(.*) https://robert.bob.com/$1 permanent;
}
这是我所做的方法,它适用于所有域,但如果只需要一个主机,您可以使用 server_name 指令。
server {
listen 80;
return 301 https://$host$request_uri;
}
如果浏览器中的 URL 没有改变,那么它就是反向代理,否则它就是重写。
类似下面的最小 nginx 配置应该可以起作用。
server {
listen 80;
location /a/ {
proxy_pass http://server1:8080;
}
location /b/ {
proxy_pass http://server2:8080;
}
location /c/ {
proxy_pass http://server3:8080;
}
}