私のUbuntu 16.04サーバーでは、/etc/Apache2/sites-enabled/000-default.conf
にApache 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
で始まる行です。
私のApache confファイル000-default.conf
onlyが<VirtualHost *:80>...</VirtualHost>
を宣言すると、Certbotはそれを複製してsecond000-default-le-ssl.conf
を定義する<VirtualHost *:443>...</VirtualHost>
と呼ばれるApache confファイル。
bothApache confファイルにはName duplicates previous WSGI daemon definition
を定義する同じ行があるため、WSGIDaemonProcess myprocess...
エラーが表示されます。これは Certbotの既知のバグ のようです。
私が見つけた回避策は、両方の仮想ホスト(80と443)をsameApache confファイル(Certbotが2番目のファイルを作成しないようにするため)、および次のように、両方の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>
エラーが示すように、WSGIDaemonProcess
定義に同じ名前を複数回使用することはできません。それらは、Apacheインスタンス全体で一意である必要があります。
同じVirtualHost
に対してServerName
の80と443の両方のインスタンスがある場合、443のインスタンスに別個のWSGIDaemonProcess
を作成しないでください。 80インスタンスで定義し、443インスタンスから名前で参照します。これにより、同じVirtualHost
のServerName
の80〜443個のインスタンス間で同じデーモンプロセスグループを共有できます。
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>
Cerbotにこれを実行させ、構成構造を変更せずにエラーを回避する方法は、問題の行をコメント化することです。したがって、この場合は次のようにする必要があります。