上下文:假设我有这个 /etc/apache2/sites-available/000-default.conf 文件(Debian 9,Apache 2.4):

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html/site1
</VirtualHost>

并且一些客户当前正在浏览该网站,甚至其中一些客户正忙于在该网站上下载 1 GB 文件(假设他们正在下载 www.example.com/bigfile.zip )。

现在我想添加一个新的 VirtualHost 并将 000-default.conf 文件编辑为(并保存):
<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html/site1
</VirtualHost>

<VirtualHost *:80>
    ServerName example2.com
    DocumentRoot /var/www/html/site2
</VirtualHost>

现在如果我这样做
service apache2 restart

它将成功启用新网站 example2.com ,但也会停止来自 example.com 的客户端的所有正在进行的请求,并且它将中断例如正在进行的下载。

问题:有没有办法添加新的 VirtualHost 而不会中断其他 VirtualHost 正在进行的请求(长时间下载等)?

笔记:
  • 我已经阅读了 How to reload apache configuration for a site without restarting apache,但问题和答案并不清楚“不重新启动”Apache 的后果是什么。与 Can I “reload” Apache2 configuration file without issues? 相同,我不确定在从客户端持续 20 分钟下载的情况下会发生什么。是等还是不等?这里的这个问题特别关注添加一个新的 VirtualHost,同时不破坏其他人的请求。
  • 我也准备了许多类似的问题,但这个问题解决了一个精确的特定要求:安装新的 VirtualHost 同时不中断正在进行的请求,例如长时间下载。
  • 最佳答案

    重启==停止,然后开始。

    而是使用 apachectl graceful 。 Graceful 让现有的连接完成,然后在每个子进程被释放时一个一个地重新启动它们。新连接将获得新配置。

    https://httpd.apache.org/docs/2.4/stopping.html#graceful

    关于apache - 添加或删除或重新加载特定的 VirtualHost,而无需重新启动 Apache(并中断其他 VirtualHost 的请求),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51346934/

    10-14 03:26