我想在反向代理中重寫 URL,以便刪除第一個段,但保留所有後續段完好無損。我需要在它到達代理通行證之前發生這種情況。
例子:
/admin/auth/local ----> (REWRITES TO) /auth/local
/admin/auth/register -------> (REWRITES TO) /auth/register
我的位置區塊:
location /admin {
#add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass_header Set-Cookie;
proxy_read_timeout 30;
proxy_buffers 64 8k;
rewrite /admin / break;
proxy_pass http://127.0.0.1:9000;
我嘗試了以下但沒有運氣:
rewrite /admin / break;
答案1
這裡有兩個部分。第一個是 nginx 如何通過proxy_pass
.
可以使用以下配置將傳入請求/
對應到帶有前綴的後端:/admin/
location / {
proxy_pass http://127.0.0.1:9000/admin/;
}
無需rewrite
任何聲明。
第二部分是由運行在 的應用程式產生的 URL 127.0.0.1:9000
。您需要設定應用程式以產生不含前綴/admin
的 URL,以便具有與 nginx 路由設定相符的 URL。
Nginx 無法可靠地對後端產生的內容進行此變更。
答案2
我相信您只需將您的第一個段落(管理)添加到代理通行證中即可。
proxy_pass http://www.example.com/admin/;
答案3
您可以嘗試以下程式碼片段。對我有用。
location ~* /admin/(.*) {
...
rewrite .* /$1 break;
proxy_pass http://127.0.0.1:9000;
}
(.*)
從第一行開始在區塊中檢索為$1
。這個想法是檢索 後的 URI admin/
,並將所有內容替換為該 URI。