Nginx的pass_proxy子目录我需要写一个nginx的位置指令请求代理到子目录到另一台服务器保存URL编码和删除子目录前缀。没有URL解码
这里是一个人为的例子 - 要求是这样的:
http://1.2.3.4/api/save/http%3A%2F%2Fexample.com
应该通过为
http://abcd.com/save/http%3A%2F%2Fexample.com
我尝试了几种不同的方法。我这里还有他们夫妇:
location /api/ { rewrite ^/api(/.*) $1 break; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_pass http://abcd.com; }
但它的字符串进行解码,所以http://abcd.com
得到/save/http://example.com
- 从another SO question
location /api/ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_pass http://abcd.com; }
但它保留子目录,所以http://abcd.com
得到/api/save/http%3A%2F%2Fexample.com
。
需要什么是在中间的某个地方。谢谢!
UPD:下面是nginx的bug跟踪系统
你可以试试lua。但首先你不需要这个,根据HTTP规格这些网址是相同的 – 2015-02-24 04:48:08
或者使用子域而不是子目录 – 2015-02-24 04:49:37
@AlexeyTen在http:// abcd.com上运行的服务器以不同的方式处理这些请求,我没有控制它。你知道该http规范摘录的链接吗?我找不到它 – 2015-02-24 08:49:32