Ubuntu 13.10でNginxとuWSGIをセットアップしようとしています。
ウェブサイトにアクセスしようとすると、「502 Bad Gateway」だけが表示されます。
ランapt-get install nginx uwsgi uwsgi-plugin-python3
nginx/uwsgiをインストールします。
/etc/nginx/sites-enabled/webpage.com:
server {
listen 80;
server_name webpage.com;
access_log /var/log/nginx/webpage.com_access.log;
error_log /var/log/nginx/webpage.com_error.log;
location / {
uwsgi_pass /var/run/webpage.com.uwsgi.socket;
include uwsgi_params;
uwsgi_param Host $Host;
uwsgi_param X-Real-IP $remote_addr;
uwsgi_param UWSGI_SCHEME $scheme;
uwsgi_param SERVER_SOFTWARE nginx/$nginx_version;
}
}
/etc/uwsgi/apps-enabled/webpage.com
[uwsgi]
vhost = true
plugin = python3
socket = /tmp/webpage.com.sock
master = true
enable-threads = true
processes = 2
home = /var/www/webpage.com/env
wsgi-file = /var/www/webpage.com/env/hello.py
virtualenv = /var/www/webpage.com/env
chdir = /var/www/webpage.com/env
touch-reload = /var/www/webpage.com/reload
/var/log/nginx/webpage.com_error.log
2014/01/17 16:28:58 [error] 25073#0: *13 connect() to unix:///var/run/webpage.com.uwsgi.socket failed (111: Connection refused) while connecting to upstream, client: 83.109.132.224, server: webpage.com, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///var/run/webpage.com.uwsgi.socket:", Host: "webpage.com"
hello.py
は、単純なhello worldアプリです。
数時間これに苦労してきました...今私は助けが必要です:)
ここに投稿された設定ファイルを見て、nginxのソケットを次のように参照します。
uwsgi_pass /var/run/webpage.com.uwsgi.socket;
そしてuwsgiでは
socket = /tmp/webpage.com.sock
これはOPの問題とは何の関係もないことを理解していますが、これはGoogleのエラーメッセージのトップヒットであるため、問題を修正した原因を書き留めておきたいと思います。
nginx
構成でセットアップされたPythonスクリプト用にuwsgi
構成に_uwsgi_pass 127.0.0.1:9090;
_を入れることを勧めるチュートリアルに従っていた_http-socket = :9090
_を使用すると、エラーログ_/var/log/nginx/error.log
_に問題が表示されました。2015/08/13 02:16:04 [error] 12566#12566: *2 upstream prematurely closed connection while reading response header from upstream, client: ::1, server: ~^(www\.)?(.+)$, request: "GET /hello/ HTTP/1.1", upstream: "uwsgi://127.0.0.1:9090", Host: "kybyz"
一方で、ブラウザが502 Bad Gatewayエラーを返していました。
それを修正するには(少なくとも)2つの方法がありました。 1つ目は、uwsgi
構成の_http-socket
_を単にsocket
に変更することでした(結局のところ、 tutorial を推奨しました。十分に注意してお読みください)。ただし、スクリプトがuwsgi
ではなくhttp
プロトコルを使用するようになったため、ブラウザーで_http://127.0.0.1:9090/
_をポイントしてスクリプトを直接テストすることはできなくなりました。そのため、_http-socket
_に戻し、nginx
構成で_uwsgi_pass
_行を_proxy_pass http://127.0.0.1:9090;
_に変更しました。
これはOPの元の質問には答えませんが、nginxで同じエラーconnect() to unix:///tmp/uwsgi_dev.sock failed (13: Permission denied) while connecting to upstream
があり、uwsgiプロセスを完全に再起動するだけで修正できました。これは本番サーバーなので、ハードリスタートを行うのをためらっていましたが、uwsgiプロセスをリロードするだけではうまくいきませんでした。それが誰かを助けることを願っています。
通常、これはファイル権限の問題です。つまり、uwsgiソケットファイルはnginxプロセスで読み取ることができません。ソケットファイルのアクセス許可とその親フォルダーおよびその祖父母フォルダーなどを確認します。これは、1つのコマンドで実行できます(nginxプロセスがユーザーnginx
で実行されていると仮定します)。
su nginx -c "[[ -r sockfile ]] && echo ok"
Python Djangoアプリの場合、オーバーロードされます。
最初にサーバーを追加して、Cインスタンス(計算)が汎用(M)インスタンスよりも優れていることに気付きました。クレジット。
しかし、しばらくアプリを実行した後(および着信要求の数が短期間に5倍に増加した後)、データベースパフォーマンス(RDS)も確認したところ、100%で実行されていました。また、データベースインスタンスのサイズを4 CPUから8 CPUに増やしましたが、エラーなしで再び機能します。