Ssl Nginx不重定向,不代理

Ssl Nginx不重定向,不代理,ssl,nginx,https,proxy,reverse-proxy,Ssl,Nginx,Https,Proxy,Reverse Proxy,我想将Nginx设置为https服务的反向代理,因为我们有一个特殊的用例,需要“取消https”连接: http://nginx_server:8080/myserver ==> https://mysecureservice 但是实际的https服务没有被代理。Nginx确实会将我重定向到实际的服务,因此浏览器中的URL会发生变化。我想与Nginx交互,因为它是实际的服务,只是没有https 这就是我所拥有的: server { listen 0.0.0.0:8080 default_

我想将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;
    }
}

您必须使用代理重定向来处理重定向

 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/”. 
例如:

 proxy_redirect https://myserver/ http://nginx_server:8080/;

来源:

如果您不希望服务器执行重定向,您可以这样设置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;
    }
}

对我来说,这个配置就足够了:

events {
}

http {
    server {
        location / {
            resolver 8.8.8.8;
            proxy_pass https://www.example.com$request_uri;
        }
    }
}
(请注意,
resolver
指令与OP中的问题无关,我只需要它能够代理外部域,如
example.com


我的问题是,我在
www.example.com
中缺少
www.
。在Firefox开发者的控制台中,我可以看到对
localhost
的GET请求返回301,因此我认为NGINX发出的是301s,而不是镜像
example.com
。事实并非如此:问题在于
example.com
返回301s以重定向到
www.example.com
,NGINX尽职尽责地镜像了这些301s,然后Firefox直接将URL从
localhost
更改为
www.example.com
,我也遇到了类似的问题。在我的例子中,我可以通过在
proxy\u pass
URL:

之前 之后
嗨,谢谢你的回复。它甚至不适用于非重定向URL。我总是被重定向,不管实际的https服务器是否发送位置头:
proxy\u redirecthttps://mysecureservice/  http://$host:$server_port/myserver/重定向从何而来?如果它来自https服务器html,则必须
subs\u过滤器
it。如果有cookie,您可能需要重写它。重定向肯定来自Nginx。我没有使用HTML,我使用的是JSON。如果我做了
curlhttps://mysecureserver/api/v3/user -我
(直接呼叫实际服务器),我得到一个200 OK。如果我对Nginx也这样做:
curlhttp://nginx_server:8080/myserver/api/v3/user -我
,我得到一个永久移动的301,它是
proxy\u set\u header host$host中的HTTP主机正确吗?它必须是mysecureserver。有这么多的投票,我一定不明白想要什么。我知道mitchkman希望代理而不是重定向,因为重定向已经发生了。这个答案说明了如何重定向,这与所要求的正好相反。这里也忘了www,这真的很容易忘记。
server {
  location / {
    proxy_pass http://example.com/path/to/some/folder;
  }
}
server {
  location / {
    # added trailing slash
    proxy_pass http://example.com/path/to/some/folder/;
  }
}