让 php 使用特定的网络接口/IP

让 php 使用特定的网络接口/IP

总结:是否有针对 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;

这将填充$_SERVERPHP 脚本内的变量。

在您的 PHP 脚本中,设置CURLOPT_INTERFACE$_SERVER['CURLOPT_INTERFACE']

我还没有测试过,但我认为它应该可行。

相关内容