我需要写一个nginx位置指令来代理请求子目录到另一个服务器保留urlencoding和删除子目录前缀.
这是一个人为的例子 - 请求如下:
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
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跟踪器中的一张票
nginx ×1