带URI修改的NGINX proxy_pass

我需要传递一些请求来代理(运行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;