我需要通过删除一部分 url 将一些请求传递给代理(运行 GlassFish)。例如:
https://xxx.net/jazz/MobileApi?id=2&make_id=4
Run Code Online (Sandbox Code Playgroud)
应该传递给代理:
http://X.X.X.X:8080/MobileApi?id=2&make_id=4
Run Code Online (Sandbox Code Playgroud)
我有以下 Nginx 配置:
upstream vito_api {
server 178.63.X.X:8080;
}
server {
listen 80;
listen 443 ssl;
....
location ~ /jazz/(?<section>.*) {
proxy_pass http://vito_api/$section/;
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)
但是,不幸的是,请求不带参数传递。因此,在 GlassFish 访问日志中,我只能看到:
"148.251.X.X" "NULL-AUTH-USER" "05/Jan/2015:15:18:40 +0100" "GET /MobileApi/ HTTP/1.0" 200 21
Run Code Online (Sandbox Code Playgroud)
我做错了什么?如何传递URL参数?
谢谢你。
来自nginx 的文档(上下文:前缀位置)
如果使用 URI 指定 proxy_pass 指令,则当请求传递到服务器时,与位置匹配的规范化请求 URI 部分将被指令中指定的 URI 替换。
因此可以通过以下方式进行简化:
location /jazz/ {
proxy_pass http://vito_api/;
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)
小智 7
我知道这是一个老问题,但我一直在寻找这个问题并找到了另一个问题,我相信这是最简单的解决方案。使用 proxy_pass 时,您不能使用 uri,但可以将其用作变量。像这儿:
location ~ ^/app/(.*)$ {
# proxy_pass http://127.0.0.1/some_dir; # error
proxy_pass http://127.0.0.1/some_dir/$1; # ok
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42383 次 |
| 最近记录: |