0

我在跑步

nginx version: nginx/1.4.6 (Ubuntu)

我想要实现的是;

  1. 请求来自http://my.frontend.com/goto/mytoken
  2. 我希望它由http://my.backend.com:5202/goto/mytoken处理
  3. 限制是只有 /goto/ 流量被转发到后端,没有 /goto/ 在前端 url 中,它应该是 404 返回即甚至http://my.frontend.com

goto是静态的,每个请求的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

xxxx - - [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"

如果我在以下位置没有/goto/,则相同的场景效果很好。

server {
listen 80;
server_name my.frontend.com;

location / {
    proxy_pass http://my.backend.com:5202;
    ...
}
}

真的很感激这里的提示。

4

1 回答 1

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/.

有关更多文档,请参阅

于 2016-05-27T13:20:58.973 回答