如何使用a2ensite启用所有站点conf(同时传递000-default.conf && default-ssl.conf)?


11

我将Ubuntu服务器16.04.2与Apache2结合使用,并在其中存储个人网站。

为了启用/etc/apache2/sites-available除(000-default.conf和之外ssl-default.conf)下的所有conf文件,我进入/var/www/html并执行a2ensite

然后我被告知:

Your choices are: 
000-default default-ssl domain.tld1 domain.tld2 domain.tld3 domain.tld4 
Which site(s) do you want to enable (wildcards ok)?

然后,我做了Ctrl+ C旨在执行其他操作的目标。

我正在寻找一种自动启用所有站点conf的方法,而无需注意特定的一种-我只想运行一个命令来启用我自己添加的所有站点conf。

Answers:


18

可能只要在您的配置目录上使用find即可。

find /etc/apache2/sites-available/ -type f -and -not -name "*default*" -exec a2ensite {} \;

这将查找名称中没有“ default”的所有配置文件并激活它们。


1
您还应该搜索具有*.conf扩展名的文件。否则a2ensite会抱怨该网站不存在
Dan

@Dan不必要,因为我们在conf目录中搜索。
Ziazis '17

从原理上讲,我认为这种方法在创建Nginx Sblock时也很好,不仅适用于Apache Vhost。

8

您需要导航到/etc/apache2/sites-available然后运行以下命令:

sudo a2ensite *

它将启用目录中的所有站点。(文件应为xxx.conf之类的东西)

然后使用重新加载apache sudo service apache2 reload

因此,您的命令序列应如下所示:

cd /etc/apache2/sites-available
sudo a2ensite *
sudo service apache2 reload

这也启用了conf文件default-ssl.conf...这在输出中很清楚Enabling site default-ssl.

您可以dpkg -S用来查看配置文件是否来自软件包。
muru

1

无论我们当前所在的位置如何,该命令sudo a2ensite "*.conf"都会尝试启用放置在中的所有配置文件/etc/apache2/sites-available/

接下来,我们可以使用它a2dissite 000-default.conf default-ssl.conf来禁用默认的Apache配置,然后我们可以使用systemctl restart apache2.service它来重新启动它。

我们可以像单个命令一样运行所有这些:

sudo bash -c "a2ensite '*.conf' && a2dissite 000-default.conf default-ssl.conf && systemctl restart apache2.service"

更重要的是,我们可以通过bash中的函数创建自定义命令:

function a2ensites {
        sudo bash -c "a2ensite '*.conf' && a2dissite 000-default default-ssl && systemctl restart apache2.service"
}
export -f a2ensites

现在我们有了命令,旨在完成这项工作。为了使此命令永久生效,我们必须将以上各行放入文件的底部,然后再放入。下一个简单的脚本将完成此任务:a2ensites~/.bashrcsource

 printf "\nfunction a2ensites { \n\tsudo bash -c \"a2ensite '*.conf' && a2dissite 000-default.conf default-ssl.conf && systemctl restart apache2.service\" \n}\nexport -f a2ensites\n" | tee -a $HOME/.bashrc; source $HOME/.bashrc

第一行不正确。在我的情况下,*通配符在传递给a2ensite命令之前已被扩展。但是,这有效sudo a2ensite "*.conf"

嗨,@ Dan,在我的情况下(Ubuntu 16.04.2),它可以正常运行而无需使用引号。但是,我已经更新了答案。您可以检查a2ensite '*.conf'系统中的工作是否正确吗?
pa4080 '17

1
是的,它有效,我在Ubuntu 17.04 btw上。

0

执行a2ensite /var/www/html/*/将使Apache启用与站点dir 具有相同名称的每个站点conf 。

作为副作用,它还会尝试匹配与站点conf文件不匹配的站点目录,如以下输出所示,但是我认为可以安全地忽略它:

ERROR: Site /var/www/html/domain.tld1 does not exist!
ERROR: Site /var/www/html/domain.tld2 does not exist!
ERROR: Site /var/www/html/nice_directory does not exist!
ERROR: Site /var/www/html/nice_file does not exist!

启用conf文件后,您可能需要重新启动Apache:

systemctl restart apache2.service

1
我不确定,但是为什么您的站点配置在webroot文件夹中?尝试使用该/etc/apache2/sites-available文件夹进行网站配置。通过a2ensite启用它们后,它们会自动链接到/etc/apache2/sites-enabled。您现在正在做什么,很奇怪,每个有权访问您的Web服务器的人都可以查看您的配置吗?
齐齐兹人

嗨@Ziazis。我真的不明白,为什么您甚至问我“每个有权访问您的Web服务器的人都可以调查您的配置?” 我是唯一使用服务器的人。如果不是,通常其他用户将无权访问文档根目录。无论如何,能否请您说明为什么要问以及您究竟发现什么错?

好吧,我不确定您正在使用此网络服务器做什么。但是,如果这是一个具有第三方访问权限的实时系统,则您不希望配置文件位于其中,/var/www/html因为这是default.html-Site 的DocumentRoot 。因此,在您的情况下,您似乎正在其中运行配置。这就像张开嘴吃饭,不要那样做;-)。
Ziazis '17

我不明白 您认为我将conf文件放在文档根目录中了吗?因为我没有。你建议我把它们放在那里?我想避免这种情况...我只想启用所有非000-default和default-ssl的控件。顺便说一句,我使用网络服务器来存储我的个人网站。

嗯,我知道了-您为所有RootDirectories命名的名称与配置文件相同。在这里,我认为您已将apache2配置更改为具有/var/www/htmlconfig文件夹。然后是Nvm。您真正需要的只是一个find ./ -type f -and -not -name "*default*" -exec a2ensite {} \;
Ziazis's

0

复制将以下行粘贴到文件名中 apache_enable.sh

cd /etc/apache2/sites-available/
a2ensite *
service apache2 reload

apache_enable.sh使用root用户提供read + execute命令并执行脚本


0

将默认配置移动到另一个文件夹,然后*应该可以为您工作。

转到“站点可用”文件夹,因为它仅在此文件夹中有效。

cd / etc / apache2 / sites-available /

须藤a2ensite *

经过测试


AFAIK,当文档根目录为/ var / www / html时,您可以从系统中的任何位置进行操作?

重要的部分是/ etc / apache2_or_other / sites-available文件夹。然后将文档根目录链接到该配置中。您可以将根目录放在/ usr / share / htlm中,除非您未将其写入conf文件,否则它不会更改任何内容。我可以在服务器中的任何位置,只要conf文件在sites-available文件夹中,a2ensite就可以完成工作。
卡洛贝尔'17

编辑我的答案,作为第一选项不起作用测试
Carobell
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.