Ошибка Certbot Apache "Имя дублирует предыдущее определение демона WSGI".
На моем сервере Ubuntu 16.04 у меня есть /etc/apache2/sites-enabled/000-default.conf
Apache в файле /etc/apache2/sites-enabled/000-default.conf
, который выглядит так (сокращенно):
WSGIApplicationGroup %{GLOBAL}
<VirtualHost *:80>
ServerName example.com
WSGIDaemonProcess myprocess user=ubuntu group=ubuntu threads=10 home=/home/ubuntu/myapp
WSGIProcessGroup myprocess
...
</VirtualHost>
Он отлично работает в режиме HTTP, но когда я запускаю $ sudo certbot --apache
для настройки HTTPS, он терпит неудачу с ошибкой Ошибка Syntax error on line 7 of/etc/apache2/sites-enabled/000-default.conf: Name duplicates previous WSGI daemon definition.
Строка 7 - это строка, начинающаяся с WSGIDaemonProcess
.
Ответы
Ответ 1
Оказывается, если мой файл apache conf 000-default.conf
объявляет только <VirtualHost *:80>...</VirtualHost>
, тогда Certbot дублирует его и создает второй файл conf apache, называемый 000-default-le-ssl.conf
определить <VirtualHost *:443>...</VirtualHost>
.
Name duplicates previous WSGI daemon definition
ошибку Name duplicates previous WSGI daemon definition
потому что оба файла WSGIDaemonProcess myprocess...
Apache имеют одну и ту же строку, определяющую WSGIDaemonProcess myprocess...
Это похоже на известную ошибку Certbot.
Обходной путь, который я нашел, состоит в том, чтобы определить как VirtualHosts (80, так и 443) в одном и том же файле конфига Apache (так что Certbot не создает второй файл) и определить WSGIDaemonProcess
вне обоих VirtualHosts, например:
WSGIApplicationGroup %{GLOBAL}
WSGIDaemonProcess myprocess user=ubuntu group=ubuntu threads=10 home=/home/ubuntu/myapp
WSGIProcessGroup myprocess
<VirtualHost *:80>
ServerName example.com
...
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
...
</VirtualHost>
Ответ 2
Как говорится в ошибке, вы не можете использовать одно и то же имя для определения WSGIDaemonProcess
более одного раза. Они должны быть уникальными для всего экземпляра Apache.
Если у вас есть 80 и 443 экземпляра VirtualHost
для одного и того же имени ServerName
, вы не должны создавать отдельный WSGIDaemonProcess
в экземпляре 443. Определите его в экземпляре 80 и ссылкой по имени из экземпляра 443. Таким образом, вы разделяете одну и ту же группу процессов демона между 80 и 443 экземплярами VirtualHost
для одного и того же ServerName
.
WSGIApplicationGroup %{GLOBAL}
WSGIRestrictEmbedded On
<VirtualHost *:80>
ServerName example.com
WSGIDaemonProcess myprocess threads=10 home=/home/ubuntu/myapp
WSGIProcessGroup myprocess
...
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
WSGIProcessGroup myprocess
...
</VirtualHost>
Ответ 3
Чтобы заставить cerbot сделать это за вас и избежать ошибки, не меняя структуру конфигурации, просто закомментируйте ошибочную строку. Итак, в этом случае вы должны:
- Поставьте # перед строкой 7.
- Запустите cerbot еще раз и попросите его попытаться переустановить существующий сертификат для вас. Это удастся на этот раз.
- Отредактируйте новый файл конфигурации, созданный для вас certbot, и раскомментируйте строку (certbot скопирует для вас весь исходный файл конфигурации, включая любые комментарии).
- Перезапустите Apache.