Nginx代理转发location配置的坑

Nginx

记录一次Nginx的巨坑,坑了一下午的时间

述求: 配置 http://xxx/api/xxx 转发到 http://xxx:8080/xxx 端口地址
原有的配置:

    location /api {
            proxy_set_header  X-Real-IP        $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy true;
            proxy_pass http://localhost:8080;
        }

遇到的问题: 转发的地址是 http://xxx:8080/api/xxx ,里面还是带有/api,不符合我们的要求
接下来尝试修改为

    location /api {
            proxy_set_header  X-Real-IP        $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy true;
            proxy_pass http://localhost:8080/;
        }

修改之后转发的地址变为 http://xxx:8080//xxx 会存在 // 的情况
接下来修改为

    location /api {
            proxy_set_header  X-Real-IP        $remote_addr;
            proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy true;
            proxy_pass http://localhost:8080/;
        }

就正确了, http://xxx:8080/xxx
查阅了网络,还有一种修改的方式,使用rewrite,但是这个属于重定向,并不符合我们的要求

    location /api {
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-NginX-Proxy true;
        rewrite ^/api/(.*) http://localhost:8080/$1;
    }

但是上述方式如果和upStream进行联合使用的话,会导致无法解析upstream里面的内容

如果喜欢博主,可以关注我的公众号哈
Nginx代理转发location配置的坑_第1张图片

你可能感兴趣的:(nginx)