Nginx确实重定向,而不是代理

mit*_*man 21 ssl https proxy reverse-proxy nginx

我想将Nginx设置为https服务的反向代理,因为我们有一个特殊的用例,我们需要"取消https"连接:

http://nginx_server:8080/myserver ==> https://mysecureservice

但是会发生的是实际的https服务没有被代理.Nginx会将我重定向到实际服务,因此浏览器中的URL会发生变化.我想与Nginx进行交互,因为它是实际的服务,只是没有https.

这就是我所拥有的:

server {
    listen 0.0.0.0:8080 default_server;
    location /myserver {
        proxy_pass https://myserver/;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header Host $host;
    }
}
Run Code Online (Sandbox Code Playgroud)

Tan*_*Tat 17

您必须使用它proxy_redirect来处理重定向.

 Sets the text that should be changed in the “Location” and “Refresh” header fields of a 
 proxied server response. Suppose a proxied server returned the header field 
 “Location:https://myserver/uri/”. The directive
 will rewrite this string to “Location: http://nginx_server:8080/uri/”. 
Run Code Online (Sandbox Code Playgroud)

例:

 proxy_redirect https://myserver/ http://nginx_server:8080/;
Run Code Online (Sandbox Code Playgroud)

资料来源:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

  • 有了这么多的赞成票,我一定不明白想要什么。我知道米奇克曼想要代理而不是重定向,因为重定向已经发生了。这个答案说明了如何重定向,这与要求的相反。 (28认同)
  • @Altimus Prime:我和你在一起。花费我的代表点之一来投反对票。只是问我,为什么这也被接受为正确答案。 (3认同)
  • @Bruce 我们了解 `proxy_redirect` 的作用。OP特别询问“Nginx确实重定向,而不是代理”,表明他们想要代理,但这个答案重定向。再说一次,这不是我们所要求的,这个答案是由谷歌提供给那些寻求反向代理的人的,这真的很烦人而且没有帮助。 (2认同)

war*_*rch 8

如果您不希望服务器进行重定向,您可以像这样设置 nginx:

server
{
    listen 80;
    server_name YOUR.OWN.DOMAIN.URL;
    location / {
        proxy_pass http://THE.SITE.URL.YOU.WANT.TO.DELEGAGE/;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
Run Code Online (Sandbox Code Playgroud)