Ssl Nginx不重定向,不代理
我想将Nginx设置为https服务的反向代理,因为我们有一个特殊的用例,需要“取消https”连接: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_
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/;
}
}