nginx proxy_pass路由到错误的后端位置

时间:2016-05-27 12:59:41

标签: nginx nginx-location

我正在运行

nginx version: nginx/1.4.6 (Ubuntu)

我想要实现的是;

  1. 请求来自http://my.frontend.com/goto/mytoken
  2. 我希望它由http://my.backend.com:5202/goto/mytoken
  3. 处理
  4. 限制是只有/ goto / traffic被转发到后端,没有/ goto / in frontend url,它应该是404返回,即使是http://my.frontend.com
  5. 转到是静态的, mytoken 对于每个请求(后端已知)都不同。

    此方案的我的服务器定义是;

    server {
    listen 80;
    server_name my.frontend.com;
    
    location ~* ^/goto/(.*) {
        proxy_pass http://my.backend.com:5202/$uri$1$is_args$args;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }
    

    但问题是;虽然根据access.log,我的URI / goto / mytoken似乎构造正常,但后端返回404

      

    x.x.x.x - - [27 / May / 2016:13:01:56 +0000]“GET / goto / 7328372837182382938 HTTP / 1.1”404 69   “http://mywebsite.com/index.html”“Mozilla / 5.0(Windows NT 6.1;   WOW64)AppleWebKit / 537.36(KHTML,像Gecko)Chrome / 50.0.2661.102   Safari浏览器/ 537.36"

    如果我有以下,即没有/转到/在位置,同样的情况也适用。

    server {
    listen 80;
    server_name my.frontend.com;
    
    location / {
        proxy_pass http://my.backend.com:5202;
        ...
    }
    }
    

    真的很感激这里的暗示。

1 个答案:

答案 0 :(得分:0)

您似乎在向proxy_pass指令追加大量变量,我认为这些变量都不是必需的。你应该从:

开始
location /goto/ {
    proxy_pass http://my.backend.com:5202;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

这将透明地传递以/goto/开头的任何URI。

有关更多文档,请参阅thisthis