需求
nginx 服务器代理前端项目,并且反代后端服务器。开发时使用没有什么问题,部署后存在同样请求根地址的情况,输入nginx的地址localhost:3000能够访问到前端地址,但是去调用后端接口就会出现报错,看来我对nginx还掌握的不够,发现是调用后端接口的时候每次请求中都会多/api/,但是后端接口路径并没有多这个/api/,最后通过重写url解决问题。
一般反向代理
一般会定义一个统一前缀,比如:api,则配置如下
server { listen 80; server_name default; 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-nginx-proxy true; proxy_pass http://example.com; } }
则请求到 http:localhost/api/findone时,会转发到 http://example.com/api/findone。
设置proxy_pass即可。请求只会替换域名,不会将/api/也替换掉。
我现在想要访问http:localhost/api/findone转发到http://example.com/findone,去掉/api/则可按照如下两种配置。
解决方案
方案一 使用 rewrite,注意到 proxy_pass结尾没有 /, rewrite 重写了 url,则最终的请求为http://example.com/findone
server { listen 80; server_name default; 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-nginx-proxy true; rewrite ^/api/(.*)$ /$1 break; proxy_pass http://example.com; } }
方案二 在 proxy_pass 后增加 / 则 nginx 会将/api之后的内容拼接到 proxy_pass 之后。
server { listen 80; server_name default; 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-nginx-proxy true; proxy_pass http://example.com/; } }
到此这篇关于nginx反向代理重写url的实现方案的文章就介绍到这了,更多相关nginx反向代理重写url内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论