nodejs工具之http-proxy-middleware

nodejs工具之http-proxy-middleware,第1张

前端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不走系统代理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10099111.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存