在我的Ubuntu 16.04服务器中,我有一个Apache Conf File在
/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
设置HTTP时,它会失败,而错误Syntax error on line 7 of /etc/apache2/sites-enabled/000-default.conf: Name duplicates previous WSGI daemon definition.
行7是以WSGIDaemonProcess
.的开始。
000-default.conf
<VirtualHost *:80>...</VirtualHost>
000-default-le-ssl.conf
<VirtualHost *:443>...</VirtualHost>
Name duplicates previous WSGI daemon definition
WSGIDaemonProcess myprocess...
WSGIDaemonProcess
出现错误,因为BothApacheconf文件具有相同的行定义
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>
。 这似乎是一个已知的certbotbug。 我发现的解决方法是指定两个virtualhosts(80和443)在samesame
Apacheconf File(以便CertBot不会创建第二个文件),并在两个VirtualHosts之外定义WSGIDaemonProcess
,这样:
VirtualHost
错误说,您不能多次使用相同的名称。它们对于整个Apache实例必须是唯一的。
ServerName
中同时拥有80和443实例,则不应在443个实例中创建一个单独的
WSGIDaemonProcess
。在80个实例中定义它,并通过名称引用443实例。这样,您在80和443实例之间共享相同的守护程序过程组。
VirtualHost
让Cerbot为您执行此操作并避免发生错误而不更改配置结构的方法是评论有问题的线路。 Certbot成功后,您将需要手动编辑配置文件,以取消点击行,并确保为新的HTTPS配置选择一个新的守护程序进程名称。 因此,在这种情况下,您应该:以
ServerName
的前面在行的前面输入#。
runcerbot再次要求它为您重新安装现有的证书。 这次将成功。原始配置文件和未点击wsgidaemonprocess line。 EDITCERTBOT为您创建的新配置文件和未注释(Certbot将为您复制整个原始配置文件,包括任何注释)。 您需要在此文件中重命名守护程序进程,因为您不能在两个不同的虚拟主机中使用相同的名称;我建议仅在安全的名称中添加一个
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>
:s
name
names
)as:/etc/apache2/sites-enabled/000-default.conf
solution从: