如何使用nginx proxy_pass保存请求的URL
我正在尝试使用瘦应用程序服务器,并有一个问题。
当nginx使用proxy_pass http://my_app_upstream;
将请求代理到精简(或独angular兽)时proxy_pass http://my_app_upstream;
应用程序接收由nginx发送的修改的URL( http://my_app_upstream
)。
我想要的是通过原来的URL和原来的请求从客户端没有任何修改,因为应用程序严重依赖于它。
nginx的文档说:
如果有必要以未处理的forms传输URI,则应使用伪指令proxy_pass,而不使用URI部分。
但我不明白如何configuration,因为相关的示例实际上是使用URI:
location /some/path/ { proxy_pass http://127.0.0.1; }
那么你能帮我搞清楚如何保留客户端的原始请求URL吗?
我认为proxy_set_header
指令可以帮助:
location / { proxy_pass http://my_app_upstream; proxy_set_header Host $host; # ... }
只是proxy_set_header主机$主机丢失我的情况下的端口。 解决:
location / { proxy_pass http://BACKENDIP/; include /etc/nginx/proxy.conf; }
然后在proxy.conf中
proxy_redirect off; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
为了完美地转发而不斩断请求的absoluteURI
URL和Host
中的Host
:
server { listen 35005; location / { rewrite ^(.*)$ "://$http_host$uri$is_args$args"; rewrite ^(.*)$ "http$uri$is_args$args" break; proxy_set_header Host $host; proxy_pass https://deploy.org.local:35005; } }
在这里find: https : //opensysnotes.wordpress.com/2016/11/17/nginx-proxy_pass-with-absolute-url/