nginx 将请求代理到错误的后端

nginx 将请求代理到错误的后端

为什么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;
  }

}

相关内容