如何禁用所有 apache 虚拟主机?

Posted

技术标签:

【中文标题】如何禁用所有 apache 虚拟主机?【英文标题】:How to disable all apache virtual hosts? 【发布时间】:2010-09-16 00:51:34 【问题描述】:

我正在编写一个 shell 脚本来进行一些 Web 服务器配置。我需要禁用所有当前活动的虚拟主机。 a2dissite 不接受多个参数,所以我做不到

a2dissite `ls /etc/apache2/sites-enabled`

我应该使用find吗?手动删除/etc/apache2/sites-enabled中的符号链接是否安全?

【问题讨论】:

【参考方案1】:

您可以执行以下操作:

sudo a2dissite '*'

或:

sudo a2dissite

它会提示您选择要禁用的那些。

禁用站点后,重新启动 apache2 服务器:

sudo systemctl restart apache2

或者只是重新加载 apache 配置而不完全重启:

sudo service apache2 reload

【讨论】:

只有在/etc/apache/sites-enabled(或类似目录)中才有效。 @StephanVierkant: * 将导致 shell 进行 globbing 并匹配当前目录中的所有文件,正如您所指出的,这可能仅在您位于 /etc/apache/sites-enabled 目录中时才有效。要将* 作为参数传递(a2dissite 确实支持作为通配符),请改用'*'【参考方案2】:

这是我的解决方法,第一种:

# a2dissite(输入此命令不带任何参数,它会提示您选择下一行)

您的选择是:siteA siteB siteC siteD

您要禁用哪些站点(通配符可以)?

现在您只需复制以上所有站点列表(siteA siteB siteC siteD)并粘贴到您的答案中,然后输入。

输出结果是:

removing dangling symlink /etc/apache2/sites-enabled/siteA.conf
removing dangling symlink /etc/apache2/sites-enabled/siteB.conf
removing dangling symlink /etc/apache2/sites-enabled/siteC.conf
removing dangling symlink /etc/apache2/sites-enabled/siteD.conf

这种方法将帮助我们选择性地选择一长串站点名称应该被删除还是原封不动。

【讨论】:

【参考方案3】:

要删除主机文件,只需将其删除。 如果您只想禁用该网站,请使用

sudo a2dissite sitename

重启apache2

sudo /etc/init.d/apache2 reload

再次从系统中完全删除(删除)它,

sudo rm /etc/apache2/sites-available/sitename

我也会在删除文件之前先禁用它

【讨论】:

【参考方案4】:

您的脚本仅 Debian 吗?如果是这样,您可以安全地删除启用站点的所有符号链接,只要所有站点都已正确写入,站点可用目录中的所有符号链接就可以工作。

例如:

 find /etc/apache2/sites-enabled/ -type l -exec rm -i "" \;

将保护您免受实际在该目录中写入文件而不是符号链接的人的侵害。

(当然,从 rm 中删除 -i 以获得自动脚本)

【讨论】:

我之前的评论的编辑 - 为 Debian Stretch 更新: 根据您的回答,我建议您使用 find /etc/apache2/sites-available/ -type f -exec basename '' \; | xargs -n 1 a2dissite,这样如果 a2dissite 脚本在未来……【参考方案5】:

经过一番研究,我发现a2dissite只是一个shell脚本,它基本上只是调用rm。所以,和其他回复一样,我同意这样做是安全的

rm /etc/apache2/sites-enabled/*

【讨论】:

【参考方案6】:

显然,你可以安装最新的 Ubuntu ;)

【讨论】:

【参考方案7】:

我从不使用“a2dissite”,总是手动删除和创建 /etc/apache2/sites-enabled 中的链接,所以是的,我会说它非常安全。

【讨论】:

【参考方案8】:

您可以删除符号链接,或将整个目录移走。除了这些链接之外,没有特殊的数据库或其他元数据。

【讨论】:

我不知道为什么这被否决了。所有a2ensitea2dissite 所做的只是在/etc/apache2/sites-enabled 目录中创建或删除链接。不过,对于大多数人来说,将目录移开可能有点过分。【参考方案9】:

您可以编辑 httpd.conf 并删除虚拟主机的包含行(在文件底部)

【讨论】:

嗯,这是通过shell脚本完成的,无法保证httpd.conf文件的结构是什么 他可以使用正则表达式。 include 基本相同。他可以将虚拟主机的目录作为参数传递,并在此基础上构建正则表达式 也不能保证所有虚拟主机都在从启用站点的目录链接的配置文件中定义。 不过,这会影响将来快速激活其中一些虚拟主机的能力。

以上是关于如何禁用所有 apache 虚拟主机?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .Htaccess 中禁用/不允许共享主机 RewriteLog 时,在 Apache 2 中模拟和测试 URL 重写规则?

禁用默认 443 虚拟主机的 Apache SSL 引擎

Apache:在服务器名称不匹配时禁用重定向到默认虚拟主机

如何禁用所有 WPF 应用程序的虚拟键盘?

Apache禁用本地主机重定向

如何在 Apache 中实现适用于所有虚拟主机的全局 RewriteCond / RewriteRule?