Как включить все конфайсы сайта с помощью a2ensite (при передаче более 000-default.conf && default-ssl.conf)?


11

Я использую сервер Ubuntu 16.04.2 с Apache2, на котором я храню свои личные сайты.

Чтобы включить все мои файлы конфигурации в /etc/apache2/sites-available(кроме 000-default.confи ssl-default.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стремясь выполнить что-то еще.

Я ищу способ автоматического включения всех конфессий сайта, не отмечая конкретного - я просто хочу запустить команду, которая включит все конфайсы сайта, которые я сам добавил.

Ответы:


18

Можно просто использовать find в вашем каталоге конфигурации.

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

Это находит все ваши файлы конфигурации, которые не имеют «по умолчанию» в их имени и активирует их.


1
Вам также следует искать файлы с *.confрасширением. Или же a2ensite будет жаловаться, что сайт не существует
Дан

@ Не нужно, так как мы ищем в каталоге conf.
Зиазис

Полагаю, этот метод также хорош в принципе при создании Sgin-блоков Nginx, и не только для Apache Vhosts.

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чтобы увидеть, если файл конфигурации из пакета.
Муру

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

1
Да, это работает, я на Ubuntu 17.04 кстати.
Дан

0

Выполнение a2ensite /var/www/html/*/заставит Apache включить каждый conf сайта, который имеет то же имя , что и dir сайта.

Как побочный эффект, он также будет пытаться сопоставить каталоги сайтов, которые не соответствуют файлам 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!

Скорее всего, вам потребуется перезапустить Apache после включения файлов conf:

systemctl restart apache2.service

1
Я не уверен, но почему конфигурация вашего сайта находится в папке webroot? Попробуйте использовать /etc/apache2/sites-availableпапку для настройки ваших сайтов. Как только вы активируете их через a2ensite, они автоматически связываются с /etc/apache2/sites-enabled. То, что вы делаете сейчас, довольно странно, и каждый, кто имеет доступ к вашему веб-серверу, может посмотреть ваши настройки?
Зиазис

Привет @Ziazis. Я действительно не понимаю, почему вы даже спрашиваете меня: «Каждый, кто имеет доступ к вашему веб-серверу, может посмотреть ваши настройки?» Я единственный, кто использует сервер; Если бы я не был, то обычно другие пользователи не имели бы доступа к корню документа. В любом случае, не могли бы вы уточнить, почему вы спрашиваете об этом, и что именно вы считаете неправильным?

Ну, я не уверен, для чего вы используете этот веб-сервер. Однако, если это живая система с доступом, доступным для третьей стороны, вам не нужно, чтобы ваши конфигурационные файлы лежали, /var/www/htmlтак как это DocumentRoot default.html-Site. Так что в вашем случае вы, кажется, запускаете конфигурации там ... Это как еда с открытым ртом, не делайте этого ;-).
Зиазис

Я не понимаю Вы думаете, я поместил файлы conf в корень документа? Потому что я не Вы предлагаете мне поставить их там? Я хотел бы избежать этого ... Я просто хочу включить все из них, которые не 000-default и default-ssl. Кстати, я использую веб-сервер для хранения своих личных сайтов.

Ах, я вижу - вы назвали все ваши корневые каталоги так же, как ваши файлы конфигурации. И тут я подумал, что вы изменили свой конфиг apache2, чтобы иметь его в /var/www/htmlкачестве папки конфигурации. Нвм тогда. Что вам на самом деле нужно, так это простоfind ./ -type f -and -not -name "*default*" -exec a2ensite {} \;
Зиазис

0

скопируйте и вставьте следующие строки в имя файла apache_enable.sh

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

и дать команду read + execute apache_enable.shи выполнить скрипт с использованием пользователя root


0

Переместите настройки по умолчанию в другую папку, и тогда * должен работать так, как вы этого хотите.

Перейдите в папку «sites-available», так как она работает только в этой папке.

cd / etc / apache2 / sites-available /

sudo a2ensite *

проверенный


AFAIK, вы могли бы сделать это из любого места в системе, когда вы документ документ root / / / www / html?

Важной частью является папка / etc / apache2_or_other / sites-available. Корень документа затем связывается в этой конфигурации. Вы можете иметь свой корень в / usr / share / htlm, и это ничего не изменит, кроме случаев, когда вы не записали его в файл conf. Я могу находиться где угодно на моем сервере, если файлы conf находятся в доступной для сайтов папке, a2ensite выполнит свою работу.
Кэробелл

Отредактировал мой ответ, так как первый вариант не работает проверенным
Carobell
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.