Certbot Apache错误"名称重复以前的WSGI守护程序定义。"

时间:2017-12-13 22:30:43

标签: apache ubuntu-16.04 mod-wsgi lets-encrypt certbot

在我的Ubuntu 16.04服务器上,我在AutoClosable有一个Apache conf文件,看起来像这样(缩写):

#!

它在HTTP模式下运行正常,但是当我运行/etc/apache2/sites-enabled/000-default.conf来设置HTTPS时,它会失败并显示错误WSGIApplicationGroup %{GLOBAL} <VirtualHost *:80> ServerName example.com WSGIDaemonProcess myprocess user=ubuntu group=ubuntu threads=10 home=/home/ubuntu/myapp WSGIProcessGroup myprocess ... </VirtualHost> 第7行是以$ sudo certbot --apache开头的行。

3 个答案:

答案 0 :(得分:17)

事实证明,如果我的Apache conf文件000-default.conf 声明<VirtualHost *:80>...</VirtualHost>,那么Certbot会复制它并创建第二个 Apache conf文件调用000-default-le-ssl.conf来定义<VirtualHost *:443>...</VirtualHost>

出现Name duplicates previous WSGI daemon definition错误,因为两个 Apache conf文件具有定义WSGIDaemonProcess myprocess...的同一行。这似乎是known Certbot bug

我发现的解决方法是相同的 Apache conf文件中定义VirtualHosts(80和443)(这样Certbot不会创建第二个文件),并在两个VirtualHosts之外定义WSGIDaemonProcess,如下所示:

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>

答案 1 :(得分:6)

如错误所示,您不能多次对WSGIDaemonProcess定义使用相同的名称。它们必须是整个Apache实例的唯一。

如果同一VirtualHost同时拥有ServerName的80和443个实例,则不应在443实例中创建单独的WSGIDaemonProcess。在80实例中定义它,并从443实例中按名称引用。这样,您可以为同一VirtualHost的{​​{1}}的80到443个实例共享同一个守护程序进程组。

ServerName

答案 2 :(得分:0)

让cerbot为您执行此操作并避免在不更改配置结构的情况下发生错误的方法是仅注释掉有问题的行。因此,在这种情况下,您应该:

  1. 在第7行的前面放置#。
  2. 再次运行cerbot,并要求它尝试为您重新安装现有证书。这次会成功。
  3. 编辑certbot为您创建的新配置文件,并取消注释该行(certbot将为您复制整个原始配置文件,包括所有注释)。
  4. 重新启动Apache。