Nginx 反向代理和 URL 重寫

Nginx 反向代理和 URL 重寫

我想在反向代理中重寫 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。

相關內容