ストックドッグ

KatoTakahiro。金融系の会社で働くSEが株やPython、その他諸々について書いています。サービスも運営してます→http://fmbrain.work

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に書き換えて解決。

うっかりミス。

まとめ

以上、終わり!