Я не могу перезапустить apace2, если я открываю порт SSL 443 в файле `/etc/apache2/ports.conf ` в ubuntu 18.04LTS

У меня проблема в 18.04Я хочу настроить SSL для своего сайта, поэтому я редактирую профиль в etc/apache2/ports.conf и добавьте строку как Listen 443, но, когда я делаю service apache2 restart сервис apahce не может быть перезапущен, но он просто отлично работает в 16.04 вот так. Затем я удаляю строку Listen 443 и сервис Apache снова работает..

Это говорит:Job for apache2.service failed because the control process exited with error code.See "systemctl status apache2.service" and "journalctl -xe" for details.

journalctl -xe:

 ubuntu apachectl[2867]: AH00526: Syntax error on line 8 of /etc/apache2/ports.conf:
 ubuntu apachectl[2867]: Cannot define multiple Listeners on the same IP:port
 ubuntu apachectl[2867]: Action 'start' failed.
 ubuntu apachectl[2867]: The Apache error log may have more information.
 ubuntu systemd[1]: apache2.service: Control process exited, code=exited status=1
 ubuntu systemd[1]: apache2.service: Failed with result 'exit-code'.
 ubuntu systemd[1]: Failed to start The Apache HTTP Server.

Строка 8 - это то, что я добавляю. 16.04 если я сделаю то же самое, я хочу знать, что-то изменилось в 18.04?

1 ответ

Решение

Я провел небольшое исследование - да, в версиях Apache2, которые поставляются с Ubuntu 16.04 и Ubuntu 18.04, существует разное поведение.

  • 16.04 поставляется с Apache/2.4.18, и неважно, сколько раз вы будете повторять идентичные директивы Listen - я проверял это на виртуальной машине.

  • 18.04 поставляется с Apache/2.4.29 и в текущей документации Apache2.4 написано:

    Состояние ошибки

    Многократные директивы Listen для одного и того же IP-адреса и порта приведут к сообщению об ошибке "Адрес уже используется".

В вашем случае директива Listen 443 появляется дважды в конфигурации Apache, поэтому в соответствии с этими новыми правилами нормально получить вышеуказанную ошибку.

По умолчанию в пределах ports.confДиректива Listen 443 заключен в <IfModule> теги, как следует:

Listen 80

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

Это означает, что он будет активен только тогда, когда mod_ssl (или же mod_gnutls) включен. Итак, если вы включили mod_sslВам не нужно ставить какие-либо дополнительные Listen 443,


Вы можете узнать, сколько раз и где директива Listen 443 появляется в вашей конфигурации командой:

grep -rni 'listen 443' /etc/apache2/

Вы можете проверить, какие модули Apache включены с помощью команды:

sudo apachectl -M
sudo apachectl -M | grep 'ssl\|tls'

Вы можете проверить, слушает ли какая-либо служба порт 443 и что это, с помощью команд:

sudo lsof -i -n -P | grep ':443'
sudo netstat -peanut | grep ':443'

Дальнейшее чтение: Как обезопасить Apache с Let's Encrypt.

Другие вопросы по тегам