Pra*_*odi 22 proxy nginx proxypass
我知道这个问题已被多次询问,但在尝试了很多解决方案后,我仍然被卡住了.
我正在使用NginX代理传递给NodeJs应用程序.我正在尝试让url https://example.com代理传递请求http://example.com:8080/?
请求(来自移动应用程序)正在请求https://example.com//哪个nginx正在进行http://example.com:8080//?哪些无效.
我尝试过但没有奏效的事情:
merge_slashes on; (默认情况下已启用)rewrite ^/(.*)/$ /$1 permanent;port_in_redirect off;我的nginx配置:
location = /a {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 300;
}
location ^~ /a/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 300;
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*Ten 30
我猜你使用没有URI的proxy_pass.在那种情况下,nginx按原样传递原始URI,而不是规范化的URI.所以你应该使用proxy_pass http://backend/;
UPDATE
所以我是对的.只需将URI部分添加到proxy_pass,如下所示:
location = /a {
proxy_pass http://127.0.0.1:8080/a;
...
}
location ^~ /a/ {
proxy_pass http://127.0.0.1:8080/a/;
...
}
Run Code Online (Sandbox Code Playgroud)
如nginx文档中所述,如果proxy_pass在没有URI的情况下使用(即在服务器:端口之后没有路径),nginx将完全按原始请求放置URI,与所有双斜杠一样,../依此类推.
另一方面,URI proxy_pass就像alias指令一样,意味着nginx会用指令中的URI 替换匹配位置前缀的部分(/a在第一个位置,/a/在第二个位置,并且是第二个)proxy_pass(我故意使其与位置前缀相同),因此URI将与请求相同但规范化(没有doule斜杠和所有工作人员).小心拖尾斜杠.Nginx从字面上取代了部分,你最终会得到一些奇怪的网址.
这是一个尾部斜杠的示例location,但没有斜线斜杠proxy_pass.
location /one/ {
proxy_pass http://127.0.0.1:8080/two;
...
}
Run Code Online (Sandbox Code Playgroud)
如果一个去地址http://yourserver.com/one/path/here?param=1nginx将代理请求http://127.0.0.1/twopath/here?param=1.看看如何two和path连接.
| 归档时间: |
|
| 查看次数: |
31253 次 |
| 最近记录: |