nginx重写url而不会导致重定向和代理到后端应用程序

时间:2015-10-30 00:36:58

标签: regex nginx proxy rewrite

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

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

所以,http://<nginx-host>:81/admin/metrics =&gt; 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

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

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

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

所以,

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

成了

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

答案 1 :(得分:0)

将 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;
}