3

我正在开发一个简单的 Perl 应用程序,它复制另一个 Perl 应用程序并构建所有必需的 Apache 配置文件。

我似乎无法弄清楚的是如何即时重新加载 apache 配置。我知道我可以进行系统调用并在那里重新加载 apache,但这意味着我必须获得对这个应用程序的 root 访问权限,这有点吓人。

有没有办法让 apache 从 CGI 容器中重新加载其配置文件?

- - - - - - - - - - - - -附加信息 - - - - - - - - - - - - --------

我做了更多的研究,问题是 Apache 必须以提升的权限运行才能绑定到端口 80。所以一种解决方案是将 Apache 设置为在另一个端口上运行并通过 iptables 将该端口转发到 80。(这可能是最后的手段,但却是一个非常混乱的解决方案)。

这让我明白了,Apache 应该能够维护其当前的端口绑定并重新检查其配置文件,我所做的只是添加另一个脚本别名。

有没有办法在不重新加载的情况下添加新的脚本别名?

4

2 回答 2

3

您还可以选择重新加载配置:

/etc/init.d/httpd reload

或者

 apachectl -k graceful

但不幸的是,那些root也需要。这与正常重启的不同之处在于当前打开的连接不会中止。副作用是旧的日志文件不会立即关闭。这意味着如果在日志轮换脚本中使用,可能需要大量延迟以确保在处理旧日志文件之前关闭它们。

此外,如果使用 daemontools 运行 Apache,您可以通过以下方式执行此操作:

svc -h /service/apache
于 2012-09-24T05:46:16.193 回答
0

很抱歉提出一个问题,然后不给其他人回答的机会,但我想出了一个解决方案,我希望它可以帮助其他人。

我必须做的就是不理会配置,如果没有 root 权限或一些花哨的端口转发,就不可能以我需要的方式重新加载(这会使这个应用程序的可移植性比我想要的要低)。

因此,Apache 似乎唯一动态加载的是文件系统。

我所做的是使用 mod_rewrite 重定向脚本请求并将它们简单地放入 /var/www/appname/copyname/cgi-bin/

于 2012-09-25T01:39:15.907 回答