我需要传递一些请求来代理(运行GlassFish),删除一段url。 例如:
https://xxx.net/jazz/MobileApi?id=2&make_id=4
应该通过代理作为:
http://XXXX:8080/MobileApi?id=2&make_id=4
我有以下的Nginxconfiguration:
upstream vito_api { server 178.63.XX: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; } }
但是,不幸的是,请求传递没有参数。 所以,在GlassFish访问日志中,我只能看到:
"148.251.XX" "NULL-AUTH-USER" "05/Jan/2015:15:18:40 +0100" "GET /MobileApi/ HTTP/1.0" 200 21
我做错了什么? 如何传递url参数?
谢谢。
从nginx的文档 (上下文:前缀位置)
如果proxy_pass指令是使用URI指定的,那么当请求传递给服务器时,与该位置匹配的标准化请求URI的部分将被指令中指定的URIreplace。
所以可以简化为以下几点:
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; }
对于你的问题,这将为你工作。 使用正则expression式。 location ^~ /jazz/ { rewrite ^/jazz/(.*)$ /$1? break; proxy_pass http://vito_api ; }
安德烈,这是行不通的。 你像往常一样过度devise它。 :)保持简单,愚蠢! 🙂
根据nginx文档:
在某些情况下,无法确定要replace的请求URI部分:
当使用正则expression式指定位置时。 在这种情况下,应该指定指令而不使用URI。
所以,请,
proxy_pass http://vito_api;