服务器有多个 IP,如何在发请求的时候自己选择使用哪个 IP?

2021-11-18 19:49:04 +08:00
 kaiki
场景是服务器向目标发送请求,但是目标限制了每个 IP 每秒的请求数量,所以需要在发送请求的时候使用不同的 IP 来提高效率。
用的 PHP 的 guzzle
1290 次点击
所在节点    问与答
6 条回复
eason1874
2021-11-18 19:59:59 +08:00
一、在 options 里传入 curl 配置
https://docs.guzzlephp.org/en/stable/faq.html?highlight=curl#how-can-i-add-custom-curl-options

CURLOPT_RESOLVE 配置解析,配合 CURLOPT_DNS_USE_GLOBAL_CACHE 和 CURLOPT_DNS_CACHE_TIMEOUT 禁用 DNS 缓存(不然可能不生效)

二、直接把请求 URL 的域名替换成 IP ,同时把域名添加到请求 headers 的 Host
ochatokori
2021-11-18 20:32:04 +08:00
@eason1874 #1 楼主是服务器有多张网卡,想要服务器通过不同网卡发送请求到目标吧。不是目标有多个 ip 。
eason1874
2021-11-18 20:34:52 +08:00
@ochatokori #2 原来这样,那我理解错了。我以为是对方有多个节点,节点有 CC 防护。那我说的方法不管用
starrys
2021-11-18 20:39:39 +08:00
代理服务器监听 0.0.0.0 ,然后通过不同 IP 代理访问?
kaiki
2021-11-18 20:40:27 +08:00
@starrys 有简单直接的操作方法吗,我也想的是用代理
kaiki
2021-11-19 00:06:14 +08:00
问题解决,用 squid ,配置写

# set out - ip 配置出口 IP
acl ip01 myip xxx.xxx.xxx.x01
acl ip02 myip xxx.xxx.xxx.x02
acl ip03 myip xxx.xxx.xxx.x03
……
acl ip0n myip xxx.xxx.xxx.x0n
#set out-ip 多公网 IP 关键配置
tcp_outgoing_address xxx.xxx.xxx.x01 ip01
tcp_outgoing_address xxx.xxx.xxx.x02 ip02
tcp_outgoing_address xxx.xxx.xxx.x03 ip03
……
tcp_outgoing_address xxx.xxx.xxx.x0n ip0n

xxx.xxx.xxx.xxx 替换成服务器自己的 IP

GuzzleHttp\Client 的$config 加上
'proxy' => 'xxx.xxx.xxx.xxx:8888'
的代理就行了,程序每次取一个地址来用,用随机或者固定的算法自己发挥吧。

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

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

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

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

© 2021 V2EX