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,以使 URL 与 nginx 路由设置匹配。

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 替换所有内容。

相关内容