Dmy*_*iak 69 ruby proxy nginx thin unicorn
我试图使用Thin app服务器并遇到一个问题.
当nginx 代理使用proxy_pass http://my_app_upstream;应用程序对Thin(或Unicorn)的请求接收由nginx(http://my_app_upstream)发送的修改后的URL .
我想要的是从客户端传递原始URL和原始请求而不进行任何修改,因为应用程序非常依赖它.
nginx的" DOC说:
如果需要以未处理的形式传输URI,则应使用指令proxy_pass而不使用URI部分.
但我不明白如何配置,因为相关的示例实际上使用URI:
location /some/path/ {
proxy_pass http://127.0.0.1;
}
Run Code Online (Sandbox Code Playgroud)
那么请你帮我弄清楚如何保留客户端的原始请求URL?
yib*_*ibe 115
我认为该proxy_set_header指令有助于:
location / {
proxy_pass http://my_app_upstream;
proxy_set_header Host $host;
# ...
}
Run Code Online (Sandbox Code Playgroud)
GKi*_*lin 10
我的情况只是proxy_set_header Host $ host miss port.解决方法:
location / {
proxy_pass http://BACKENDIP/;
include /etc/nginx/proxy.conf;
}
Run Code Online (Sandbox Code Playgroud)
然后在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;
Run Code Online (Sandbox Code Playgroud)
小智 5
nginx 还提供了 $http_host 变量,它将为您传递端口。它是主机和端口的串联。
所以你只需要做:
proxy_set_header Host $http_host;
Run Code Online (Sandbox Code Playgroud)
如果某些内容修改了您尝试提供服务的位置,例如try_files,这会保留对后端的请求:
location / {
proxy_pass http://127.0.0.1:8080$request_uri;
}
Run Code Online (Sandbox Code Playgroud)
请注意其他发现此问题的人:使 nginx 不操纵 URL 的解决方案的核心是删除 Copy: proxy_pass 指令末尾的斜杠。http://my_app_upstream与 http://my_app_upstream/ – 雨果约瑟夫森
我在上面的评论中发现了这一点,但我认为这真的应该是一个答案。
| 归档时间: |
|
| 查看次数: |
103021 次 |
| 最近记录: |