从nginx中删除不需要的前导斜杠

时间:2017-01-20 15:04:25

标签: python nginx

我的nginx服务器有以下配置(在服务器标签内):

location / {

  proxy_set_header        Host $host;
  proxy_set_header        X-Real-IP $remote_addr;
  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header        X-Forwarded-Proto $scheme;

  # Fix the “It appears that your reverse proxy set up is broken" error.
  proxy_pass          http://localhost:5000;
  proxy_read_timeout  90;


}
location /api {
  proxy_set_header        Host $host;
  proxy_set_header        X-Real-IP $remote_addr;
  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header        X-Forwarded-Proto $scheme;

  # Fix the “It appears that your reverse proxy set up is broken" error.
  proxy_pass          http://localhost:2233/;
  proxy_read_timeout  90;
  proxy_redirect default;
}

我现在尝试通过我的webbrowser访问/ api / auth / login /。在端口2233,我有一个运行Flask的python服务器。现在在python控制台中我得到:

"GET //auth/login/ HTTP/1.0" 404 -

在我的意见中,这条路很乱,也没有在烧瓶中配置,这就是为什么有404响应(/ auth / login我有路由)。

如何摆脱nginx产生的主要斜杠?

1 个答案:

答案 0 :(得分:2)

您正在使用proxy_pass指令将/api/foo别名设为/foo。如果源URI和目标URI以/结尾或两端都没有/,则别名往往效果最佳。

所以:

location /api/ {
    proxy_pass http://localhost:2233/;
    ...
}

/api/foo正确映射到/foo,而不会在开头添加双重/。有关详细信息,请参阅this document

这也可能意味着裸URI /api现在可能无法正常工作。

或者,使用rewrite ... break;而不是proxy_pass执行别名:

location /api {
    rewrite ^/api(?:/(.*))?$ /$1 break;
    proxy_pass http://localhost:2233;
    ...
}

有关详细信息,请参阅this document