我的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产生的主要斜杠?
答案 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。