使用Nginx进行反向代理,代码如下:
server {
listen 85;
server_name _;
charset utf-8;
location /thirdServiceApi/ {
proxy_pass https://www.test.net/thirdServiceApi/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
根据配置的逻辑,当请求地址如下时
nginx会将接口代理到如下地址:
启动服务后测试,看到日志里显示404
问题解决
查找问题,定位到了这一行
proxy_set_header Host $http_host;
通过注释到这一行可以解决问题;
注释后使用的是默认值:
proxy_set_header Host $proxy_host;
请求头设置的为代理后的域名。
解决跨域问题
添加如下几行代码即可:
add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Headers *;
add_header Access-Control-Allow-Methods "GET, POST, PUT, OPTIONS";
最终代码如下:
nginx打印请求信息配置:
打印客户端上传上来的header头部信息,同时头部信息是自定义的。可以通过http_xx 的方式实现header输出。
Authorization,写成\$http_Authorization;
sec-ch-ua这种带横线的字段,写成\$http_sec_ch_ua,nginx会自动做处理的。
302问题
使用之前的nginx配置放到内网机器测试;通过公网访问内网服务提示了一个302 found:
公网端口是28081 ,内网端口8081
访问公网http://ip:28081 nginx返回了内网的http://ip:8081地址后重定向了;
通过配置以下代码,进行接口跟随配置可以解决
proxy set header Host $http host;
proxy set header X-Forwarded-Port $server port;
全部配置如下: