Nginx反向代理中去除URL尾斜杠及404问题排查求助
Nginx反向代理中去除URL尾斜杠及404问题排查求助
各位大佬好,我最近配置Nginx反向代理时碰到个头疼的问题,折腾好久都没搞定,来这儿求助大家!
我的需求是这样的:希望通过Nginx的proxy_pass实现两种URL路径都能正确代理到目标站点example.com:
- 访问
proxy.com/api/的时候,能正常代理到example.com,这个目前已经没问题了 - 访问
proxy.com/api(不带末尾斜杠)的时候,同样要代理到example.com,但现在要么返回404错误,要么被自动重定向到带尾斜杠的地址
我当前用的Nginx配置是这样的:
server { listen 80; server_name proxy.com; location / { root html; index index.html index.htm; } location /api { proxy_set_header X-Real-IP $remote_addr; proxy_set_header HOST $host; proxy_set_header X-NginX-Proxy true; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; rewrite ^/api(.*)$ $1?$args break; # rewrite ^/api(.*)/$ /$1 break; proxy_pass http://exmaple.com; proxy_redirect off; } }
配置成这样之后,访问proxy.com/api会出现下面的错误页面:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Wed Dec 07 06:55:15 UTC 2022
There was an unexpected error (type=Not Found, status=404).
同时查看error.log,里面有这样的错误日志:
the rewritten URI has a zero length, client: 127.0.0.1, server: proxy.com, request: "GET /api HTTP/1.1", host: "proxy.com"
我尝试调整过rewrite规则(比如注释里的那条),但还是会出现同样的错误,实在不知道该怎么处理了,有没有大佬能指点一下呀?
备注:内容来源于stack exchange,提问作者Joker




