いつもながら apache2 / wsgiで django app を起動設定するのに苦労したのでメモ。
症状
- httpsで繋がらない。 HTTP 500エラーが帰る。
確認手順
1) firewallでブロックしていないかsudo ufw status
で確認する。 443 ALLOW Anywhere
などがあれば、通常のHTTPアクセスが可能。 なければ、ポートを使えるように設定する。(sudo ufw allow from any to any port 443
)
2) /var/log/apache2/error.log や /var/log/apache2/access.logにエラーがないか? あればそれを調べる。
3) port 443 (HTTPS)をlistenしているプロセスがあるかsudo lsof -i4TCP
で確認する。 443で聞いているプロセスがない場合は、wsgi,sslの設定を確認する。
4) wsgiは有効になっている?https://qiita.com/shigechioyo/items/2b25f60918be6b81581a などに沿って有効化する。あとで分からなくなるといけないので、venv(virtualenv)下で、pipでインストールするのがおすすめ。 /etc/apache2/mods-available/wsgi.loadファイルをpip でインストールしたwsgiのパスに合わせて定義する必要があるので注意。作成したvenvディレクトリの内部をさすようになる。
私の例では、 4)でerror.logに次のログが出た。
[Tue Mar 06 14:32:30.116164 2018] [wsgi:error] pid 2170:tid xxx140125119969024No such file or directory: [client xxxxxx:63036] mod_wsgi (pid=2170): Unable to connect to WSGI daemon process 'xxxxx.yukilab.cc' on '/etc/apache2/run/wsgi.2167.0.1.sock' as user with uid=33., referer: https://xxxxxxx.yukilab.cc/
5) sudo apachectl configtest
してみる。通ればOK。通らなかったら直す。
6) WSGISocketPrefix のディフォルトは run/wsgiになっているが、ubuntuではそれでは root以外利用できないので、 /var/run/wsgiに修正したあと、sudo service apache2 restart
する。ここでエラーが発生せず、接続できるようになった。 (参考: https://code.google.com/archive/p/modwsgi/wikis/ConfigurationIssues.wiki )
まだ、アプリケーションレベルのエラーがあるけど、apache/wsgiの設定は終了!