You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动