nginxとuwsgiを使っていてInternal Server Errorが発生したとき
Internal Server Error
nginxとuwsgiを使っていてInternal Server Errorがでたので、対処法をまとめておきます。
Internal Server Errorが発生している原因は、uwsgiの設定のミスと権限の設定のミスの2つでした。
エラーログを見てみる。
cd /var/log/nginx tail -n 100 error.log
以下、エラーログ。
connect() to unix:///tmp/uwsgi.sock failed (2: No such file or directory) while connecting to upstream,
uwsgi側でソケットが作成されず、uwsgi.sockが見つからない、というエラーっぽい。
uwsgi側に原因があると判明しました。
原因1
権限
公開ディレクトリの権限が正しくありませんでした。
/var/www/html
このhtmlの権限がrootになっていたので、書き換え。
chown -R www-data:www-data html
nginxはwww-dataユーザーが実行することになるため、www-dataがアクセスできる権限にしておかないといけない。
原因2
uwsgiの設定
uwsgiを立ち上げたときに、エラーがでている。
uwsgi --ini index.ini
以下、エラー。
ImportError: No module named 'app'
モジュールの呼び出しに失敗しているので、これはuwsgiでエラーが発生はしているが、python周りっぽい。
以下、uwsgiの設定。
[uwsgi] module = app callable = app master = true processes = 1 socket = /tmp/uwsgi.sock chmod-socket = 666 vacuum = true die-on-term = true
module = app、こいつが原因だ。
moduleには、アクセスがあったときに立ち上がるpythonファイルを指定する。
この場合だと、app.pyが立ち上がる設定になっている。
しかし、app.pyなんてファイルはないため、ImportErrorが発生している。
そういえば、app.pyではなく、index.pyという名前で作成していた。
module = appからmodule=indexに書き換えて解決。
うっかりミス。
まとめ
以上、終わり!