进一步阅读

进一步阅读

我有一个在 Hyper-V 中运行的 Fedora 25 VM。该虚拟机用于在 Apache 上运行的 PHP 应用程序。它是最新的并且正在运行的所有东西。

连接到远程网站的简单 php 脚本在 Apache 中运行时失败,但在命令行中运行良好:

$host='tcp://www.shinyandnew.ca/';
$socket = stream_socket_client($host, $errno, $errstr, 10, STREAM_CLIENT_CONNECT, stream_context_create());

if (!$socket) {
    print ("Unable to connect to ${host}: ${errno} ${errstr}\n");
} else {
    print ("Connected to ${host} successfully \n");
  fclose($socket);
}

错误是

php_network_getaddresses:getaddrinfo 失败:名称或服务未知

但是,虚拟机具有网络访问权限,并且 php 命令行一切正常。这表明这是一个 Apache 问题。另外:如果我重新启动 Apache,问题就会消失。

因此我的问题是:

如何强制 Apache 在重新启动后正确解析名称?如果我需要在每次网络更改后重新加载 Apache,这对于此安装来说是可以接受的(它是一个开发工作站):如何自动触发它以便它在启动时工作?有没有一个 systemd 方法可以做到这一点?

答案1

您不需要触发重新加载或重新启动。您只需要确保 Apache 不会启动,直到/etc/resolv.conf由在引导程序中执行此操作的任何程序编写完成为止。 PHP bug 跟踪器的建议是使用 systemd 覆盖文件添加一个After=扩展名,将相关服务命名为httpd.service

cd /etc/systemd/系统/
安装-m 0755 -d httpd.d
echo >> httpd.d/after.conf "[单位]"
echo >> httpd.d/after.conf "After=network.service systemd-networkd.service network-online.target"

进一步阅读

答案2

将 Apache 重新加载脚本放入/etc/NetworkManager/dispatcher.d文件夹中。来源:无线接口启动后在 Fedora 13 中启动时运行守护进程

或者从 Upstart conf 触发 Apache 配置重新加载。

我的意思是这样的

start on net-device-up- 但这可能是 Ubuntu 特有的。

相关内容