【问题标题】:nginx rewrite url without causing redirect and proxy to backend appnginx 重写 url 而不会导致重定向和代理到后端应用程序
【发布时间】:2016-01-30 08:30:23
【问题描述】:

我正在尝试在 nginx 中实现以下目标:

http://<nginx-host>:81/admin/metrics 上点击 nginx,并让 nginx 将其代理到 http://127.0.0.1:8001,并将 /admin/metrics 重写/metrics。实际代理的管理应用程序将收到http://127.0.0.1:8001/metrics

所以,http://<nginx-host>:81/admin/metrics => http://127.0.0.1:8001/metrics,并且没有导致redirect

这是我目前所拥有的:

#admin app
upstream admin_backend {
    server 127.0.0.1:8001;
    keepalive 16;
}

#host /admin paths on another port
server {
  listen 81;

  #pass everything to backend admin app that matches /admin/* with /admin/ removed
  location ~ /admin/ {
    limit_except GET HEAD POST PUT { }

    proxy_set_header Host $host;
    proxy_http_version  1.1;
    proxy_pass http://admin_backend;

    rewrite ^/admin/(.*)$ /$1 last;
  }
}

这不起作用。 nginx 没有将请求代理回admin 应用程序并不断返回404

我在这里错过了什么?

【问题讨论】:

    标签: regex nginx proxy rewrite


    【解决方案1】:

    我在nginx users forum 上交叉发布了这个问题,并从nanaya 获得了解决方案(谢谢!)。

    基本上,我需要做的就是在rewrite 指令中将last 替换为break

    所以,

    rewrite ^/admin/(.*)$ /$1 last;
    

    成为

    rewrite ^/admin/(.*)$ /$1 break;
    

    【讨论】:

      【解决方案2】:

      将api和文件请求重定向到后端

      location ~ /api/ {
          proxy_set_header    X-Forwarded-Host    $host;
          proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
          proxy_pass http://server:8009;
          rewrite ^/api/(.*)$ /$1 break;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-11
        • 2020-03-13
        • 2019-11-04
        • 1970-01-01
        • 2014-02-01
        • 1970-01-01
        • 2012-03-05
        • 1970-01-01
        相关资源
        最近更新 更多