提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
nginx作为反向代理时接口映射找不到接口
一、报错信息
二、需求
1.接口代理情况
前端调用 http://xxx.xx.xx:9007/dbswitch/xxx 需要代理到http://xxx.xxxx.xxx:9088/dbswitch/xxx
2.错误原因分析
后端能看到报错信息,说明代理是成功的,只是在代理的过程中,因为配置等原因造成了接口地址变化
三 解决方法
1. proxy_pass的坑
理解 proxy_pass http://192.168.1.212 和 proxy_pass http://192.168.1.212/ 的区别
server {
listen 80;
server_name xy.xxx.com; // 接口的域名
access_log /data/www/logs/nginx/access.log main;
add_header Access-Control-Allow-Origin http://xy.xxx.com; // 允许的域名跨域
add_header Access-Control-Allow-Credentials true;
include nginx_xxx.conf;
location / {
#配置1 proxy_pass http://192.168.1.212:8136;
#配置2 proxy_pass http://192.168.1.212:8136/;
include nginx_proxy.conf;
}
error_page 500 502 503 504 /502.html;
location = /50x.html {
root html;
}
}
当接口请求中location为 / 来匹配时,如果请求是 http://xy.xx.com/xxx的时候,1和2的配置都会指向http://192.168.1.212:8136/xxx
2.当location存在值时
server {
listen 80;
server_name xy.xxx.com; // 接口的域名
access_log /data/www/logs/nginx/access.log main;
add_header Access-Control-Allow-Origin http://xy.xxx.com; // 允许的域名跨域
add_header Access-Control-Allow-Credentials true;
include nginx_xxx.conf;
location /bus/ {
#配置1 proxy_pass http://192.168.1.212:8136;
#配置2 proxy_pass http://192.168.1.212:8136/;
include nginx_proxy.conf;
}
error_page 500 502 503 504 /502.html;
location = /50x.html {
root html;
}
}
当location块使用了 /bus/ 作为uri变量的值来匹配,如果请求为http://wy.xxx.com/bus/xxx时
如果是配置1,那么指向的地址为:http://192.168.1.1212:8136/bus/xxx,
如果为配置2,那么指向地址为http://192.168.1.1212:8136/xxx