Ngnix 奇怪问题...不知道怎么解决

2021-12-25 21:44:50 +08:00
 jbue520

这个是服务器的架构,域名解析到 186.16.15.12 的外网 IP 上,然后 186.16.15.12 上安装 NGNIX ,反向代理到 192.168.1.1 上,因为涉及到微信公众号,所以已经把 186.16.15.12 的 IP 加入到白名单上,但是出现一个奇怪的问题,服务器访问公众号的时候,却是另一个 IP 地址去访问,就是 221.221.221.221 的 IP 去访问微信公众号,导致访问不上.. 所以我的问题就是这个是怎么发生的?如何让固定的 IP 186.16.15.12 去访问公众号?如果要全部外网 IP 加入到白名单里,那如果我有多条外网线路,那不是都要加进去?

2816 次点击
所在节点    NGINX
15 条回复
chairuosen
2021-12-25 22:00:38 +08:00
出口和入口不一样很正常 ,186.16.15.12 只是公网进来的流量,走域名->nginx ,是由外向内的流量。你业务请求公众号是由内到外是不走这条路的,除非反过来是公众号请求你的域名。你要搜索的是如何指定网卡 IP 发请求(如果 221 是绑在你内网机器的,我猜不是),或者问运维内网机器出口网关是哪怎么指定
jbue520
2021-12-25 22:10:06 +08:00
Nginx 这台服务器是 windows 的,有没有什么方法让出口 IP 访问请求固定为 186.16.15.12 这个呢??
sujin190
2021-12-25 22:32:43 +08:00
@jbue520 #2 调路由优先级啊,网络基础了吧,如果在本机的话也可以打开 socket 的 bind 到对应网卡上去

如果云主机买的公网 ip 这种的话,以上两种方式就不行了,但是云主机后台都有设为出口 ip 这样的功能吧,你可以找找看

话说把所有 ip 都加到白名单里就是了,干嘛这么纠结?
gtchan13579
2021-12-26 07:20:33 +08:00
可以设置 acl 或者添加静态路由表,具体要看你路由表。
jbue520
2021-12-26 10:16:41 +08:00
@sujin190 主要是服务器托管了,最简单的方法肯定是添加白名单,但是公众号不单单一个,而且管理员还不同,还得一个一个的去联系,太麻烦了!
jbue520
2021-12-26 10:18:05 +08:00
@gtchan13579 现在就是服务器是托管出去,只能改路由表么?
ik
2021-12-26 10:25:32 +08:00
没太看懂你的描述,nginx 是不是有配置这两条呢?

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
Kinnice
2021-12-26 10:27:26 +08:00
route -n 把第一行删了
thunderw
2021-12-26 10:56:59 +08:00
@jbue520 托管出去的,那一个电话过去让机房帮你改?
ch2
2021-12-26 12:56:21 +08:00
改一下路由表记录的优先级
到 0.0.0.0/32 的全部路由表记录中,221.221.221.221 的 metric 优先级比 186.16.15.12 的更高
所以对外发请求的时候会通过 221.221.221.221 发出去
Xusually
2021-12-26 15:27:13 +08:00
defaut gw 的问题
改路由表就行
你需要的出口优先级调高就可以了
akira
2021-12-26 16:05:27 +08:00
如果是阿里云的 vpc 的话,应该是 dnet 和 snet 的配置问题,出口 ip 配一下就好
msg7086
2021-12-26 19:44:05 +08:00
AlexEzio
2021-12-27 10:56:28 +08:00
这个问题和 nginx 没有关系, 原因在于出口多线路时,网关路由策略的选择导致了不同路线出口。
内网客户端无法决定网关路由策略,因此最佳方案是通过网关层策略修改来达到预期的效果。

解决方法:
# 网关层
1. 固定外网 IP ,建议把所有 IP 加入微信白名单,因为多线路场景,对应的是多运营商与负载均衡,不同运营商的流量走不同的路线,以获取最佳速度
2. 如果 IP 过多,想指定某一条路线走特定流量,可以通过路由层,加上策略路由,通过七层策略,匹配所有*.weixin.com 的 http host 头流量走特定 IP 出口。
# 客户端层
3. 如果路由层不支持七层策略,可以咨询运维人员,获取具体的四层策略,比如联通 IP 走哪个,电信 IP 走哪个。 然后手动修改服务器 host ,将微信服务器指向特定的运营商 IP , 来保持请求总是走到对应的外网路线上
4. 如果外网是动态 IP ,客户端需要编写脚本,定期获取自己的外网地址,然后通过微信的 api,进行白名单刷新。 这也是常用手段之一
yadgen
2022-01-04 17:18:52 +08:00
整一个网关。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/824434

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX