
前端ui项目启动后,调用后端接口,报500,将接口在地址改为服务器的ip后验证后接口是正常的。
gateway 上部署了多个server,比如api-user ,api-auth ,api-iips
调用的api-iips接口需要通过网关gateway(17216101224:9200)转发到api-iips server方可。
接口转发-需要将 >
现在使用的代理大部分为>
之前在预生产环境遇到过这个问题,h5页面和API部署在不同域名下,访问接口返回值为乱码。
当时的解决办法为放在同一域名下,但是并没有解决根本问题。
现在生产环境公司要求绝对不能放在同一域名下,(一个小伙伴给的解释是抢占资源,我觉得合理)
所以当下问题就来了,搞了两天才弄明白真正原因。
第一,乱码问题
是因为nginx为了节省资源在返回html的时候会自动压缩(不知道记得对不对)
在请求的时候加上 gzip:true 即可。
第二,nginx返回404问题
乱码问题解决了以后,发现nginx返回的结果为404。
原因是headers
是因为此处传给API的headers直接复用了页面给nodejs的headers(reqheaders为页面给nodejs的headers)reqheaders有个参数为host指向的是h5页面的地址而不是API的地址
(猜测,加上host后nginx会根据host来找调用的API地址,因为不在同一域名下,此时host指向的是页面部署的域名而不是API部署的域名,自然找不到,这也就解释了为什么部署在同一域名时不会出现问题。
本地运行的时候,访问IP地址可以正常返回结果,访问IP对应的域名时404,是因为访问IP时不会通过nginx,所以也不会有问题)
获取客户端ip,其他的ip不允许访问
function getClientIp (req) {
var ipAddress;
var forwardIpStr = reqheaders['x-forwarded-for'];
if (forwardIpStr) {
var forwardIp = forwardIpStrsplit(',');
ipAddress = forwardIp[0];
}
if (!ipAddress) {
ipAddress = reqconnectionremoteAdress;
}
if (!ipAddress) {
ipAddress = reqsocketremoteAdress;
}
if (!ipAddress) {
if (reqconnectionsocket) {
ipAddress = reqconnectionsocketremoteAdress;
}
else if (reqheaders['remote_addr']) {
ipAddress = reqheaders['remote_addr'];
}
else if (reqheaders['client_ip']) {
ipAddress = reqheaders['client_ip'];
}
else {
ipAddress = reqip;
}
}
return ipAddress;};
以上就是关于nodejs工具之http-proxy-middleware全部的内容,包括:nodejs工具之http-proxy-middleware、nodejs如何检查哪个IP访问80端口、nodejshttp不走系统代理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)