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