いつもながら apache2 / wsgiで django app を起動設定するのに苦労したのでメモ。
症状
- httpsで繋がらない。 HTTP 500エラーが帰る。
確認手順
- firewallでブロックしていないか
sudo ufw status
で確認する。443 ALLOW Anywhere
などがあれば、通常のHTTPアクセスが可能。 なければ、ポートを使えるように設定する。(sudo ufw allow from any to any port 443
) - /var/log/apache2/error.log や /var/log/apache2/access.logにエラーがないか? あればそれを調べる。
- port 443 (HTTPS)をlistenしているプロセスがあるか
sudo lsof -i4TCP
で確認する。 443で聞いているプロセスがない場合は、wsgi,sslの設定を確認する。 - 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 xxx140125119969024] (2)No 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/
-
sudo apachectl configtest
してみる。通ればOK。通らなかったら直す。 - WSGISocketPrefix のディフォルトは run/wsgiになっているが、ubuntuではそれでは root以外利用できないので、 /var/run/wsgiに修正したあと、
sudo service apache2 restart
する。ここでエラーが発生せず、接続できるようになった。 (参考: https://code.google.com/archive/p/modwsgi/wikis/ConfigurationIssues.wiki )
まだ、アプリケーションレベルのエラーがあるけど、apache/wsgiの設定は終了!