总结:是否有针对 IP/网络接口的运行时或 php.ini 指令?
设置:Debian,NginX,php-fpm
该机器在网络接口中配置了多个 IP。NginX 中的每个虚拟主机都在监听一个特定的 IP。如果 PHP 执行任何与网络相关的操作(例如 cURL 调用),则每次都会使用默认 IP。如果我在脚本中手动设置 CURLOPT_INTERFACE,则会使用正确的 IP,但我需要通过 NginX vhost 和 php-fpm 握手以某种方式自动执行此操作。
因此,当 site1.com 被调用时,它需要以某种方式将该站点正在监听的 ip 传递给 php-fpm,而 php-fpm 需要将其设置为网络接口,用于 php 在执行期间建立的任何 Internet 连接,无论是 cURL、get_file_contents() 还是任何其他函数。
这能做到吗?
谢谢
答案1
回答你的 TLDR,不,PHP 本身无法做到这一点。没有可以更改所有出站流量(如 file_get_contents/等)的全局设置。正如你所说,你可以自定义 curl 和其他几个包/组件的界面,但没有可以全局设置它的东西。
Mark Strosberg 的答案应该适用于 curl!
答案2
在您的 Nginx 配置中,您可以添加此项,并将数字设置为所需的 IP。
fastcgi_param CURLOPT_INTERFACE 1.2.3.4;
这将填充$_SERVER
PHP 脚本内的变量。
在您的 PHP 脚本中,设置CURLOPT_INTERFACE
为$_SERVER['CURLOPT_INTERFACE']
;
我还没有测试过,但我认为它应该可行。