On my Ubuntu 16.04 server, I have an Apache conf file at /etc/apache2/sites-enabled/000-default.conf
, which looks like this (abbreviated):
WSGIApplicationGroup %{GLOBAL}
<VirtualHost *:80>
ServerName example.com
WSGIDaemonProcess myprocess user=ubuntu group=ubuntu threads=10 home=/home/ubuntu/myapp
WSGIProcessGroup myprocess
...
</VirtualHost>
It works fine in HTTP mode, but when I run $ sudo certbot --apache
to set up HTTPS, it fails with the error Syntax error on line 7 of /etc/apache2/sites-enabled/000-default.conf: Name duplicates previous WSGI daemon definition.
Line 7 is the line beginning with WSGIDaemonProcess
.
It turns out that if my Apache conf file 000-default.conf
only declares <VirtualHost *:80>...</VirtualHost>
, then Certbot duplicates it and creates a second Apache conf file called 000-default-le-ssl.conf
to define <VirtualHost *:443>...</VirtualHost>
.
The Name duplicates previous WSGI daemon definition
error appears because both Apache conf files have the same line defining WSGIDaemonProcess myprocess...
. This appears to be a known Certbot bug.
The workaround I've found is to define both VirtualHosts (80 and 443) in the same Apache conf file (so that Certbot doesn't create a second file), and to define WSGIDaemonProcess
outside both VirtualHosts, like this:
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>
As the error says, you cannot use the same name for a WSGIDaemonProcess
definition more than once. They have to be unique for the whole Apache instance.
If you have both 80 and 443 instances of the VirtualHost
for same ServerName
, you shouldn't create a separate WSGIDaemonProcess
in the 443 instance. Define it in the 80 instance and reference by name from the 443 instance. That way you share the same daemon process group between 80 and 443 instances of the VirtualHost
for the same 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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With