在我的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
开头的行。
答案 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为您执行此操作并避免在不更改配置结构的情况下发生错误的方法是仅注释掉有问题的行。因此,在这种情况下,您应该: