48

nginx-error.logファイルに次のエラーが表示されます。

2014/02/17 03:42:20 [crit] 5455#0: *1 connect() to unix:/tmp/uwsgi.sock failed (13: Permission denied) while connecting to upstream, client: xx.xx.x.xxx, server: localhost, request: "GET /users HTTP/1.1", upstream: "uwsgi://unix:/tmp/uwsgi.sock:", host: "EC2.amazonaws.com"

ブラウザには、502 Bad Gateway エラーも表示されます。a の出力はcurl同じ、 Bad Gateway html です

/tmp/uwsgi.sockのアクセス許可を 777に変更して修正しようとしましたが、うまくいきませんでした。私もwww-dataグループに自分自身を追加しました (似たように見えるいくつかの質問がそれを示唆していました)。また、サイコロはありません。

これが私のnginx.confファイルです:

nginx.conf

worker_processes 1;
worker_rlimit_nofile 8192;

events {
  worker_connections  3000; 
}

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on; 
    #tcp_nopush     on; 

    keepalive_timeout  65; 

    #gzip  on; 

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

説明を徹底するために、NginsxとUwsgiでFlaskアプリケーションを実行しています。誰かに何かアイデアがあれば、本当に感謝します。


編集

uwsgi 構成ファイルを提供するように求められました。そのため、nginx や uwsgi ファイルを個人的に作成したことはありません。ansible-playbook を使用してすべてをセットアップするガイドhereに従いました。ファイルは自動生成されましたが、とフォルダの両方にあるファイル以外nginx.confには何もありませんでした。uwsgi 用に独自の構成ファイルを作成する必要がありますか? ansible がそれらすべてを処理してくれるという印象を受けました。/etc/uwsgiREADMEapps-enabledapps-available

ansible-playbookこのコマンドを実行したときから、uwsgi の構成を把握したと思います

uwsgi -s /tmp/uwsgi.sock -w my_app:app

起動し、これを出力します:

*** Starting uWSGI 2.0.1 (64bit) on [Mon Feb 17 20:03:08 2014] ***
compiled with version: 4.7.3 on 10 February 2014 18:26:16
os: Linux-3.11.0-15-generic #25-Ubuntu SMP Thu Jan 30 17:22:01 UTC 2014
nodename: ip-10-9-xxx-xxx
machine: x86_64
clock source: unix
detected number of CPU cores: 1
current working directory: /home/username/Project
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 4548
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to UNIX address /tmp/uwsgi.sock fd 3
Python version: 2.7.5+ (default, Sep 19 2013, 13:52:09)  [GCC 4.8.1]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x1f60260
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 72760 bytes (71 KB) for 1 cores
*** Operational MODE: single process ***
WSGI app 0 (mountpoint='') ready in 3 seconds on interpreter 0x1f60260 pid: 26790 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (and the only) (pid: 26790, cores: 1)
4

7 に答える 7

3

これらのアクセス許可 ( chmod/ chown) を uWSGI 構成で設定する必要があります。

chmod-socketですchown-socket

http://uwsgi-docs.readthedocs.org/en/latest/Options.html#chmod-socket http://uwsgi-docs.readthedocs.org/en/latest/Options.html#chown-socket

于 2014-02-17T11:08:13.170 に答える
1

手遅れであることはわかっていますが、他の人に役立つかもしれません。virtualenv、uwsgi、およびnginxの非常にシンプルで優れたドキュメントを使用して、実行中のフラスコに従うことをお勧めします。

プロジェクトを virtualenv で実行する場合は、環境をアクティブ化する必要があります。

ここにyolo.pyがあります

from config import application

if __name__ == "__main__":
    application.run(host='127.0.0.1')

/tmp/ ディレクトリに uwsgi.sock ファイルを作成し、空白のままにします。@susanpal の回答によると、「uwsgi が /tmp/uwsgi.sock の所有権とアクセス許可を 755 にリセットし、uwsgi が起動するたびに uwsgi を実行しているユーザーがアクセス許可の問題を引き起こすため、アクセス許可の問題が発生します。」正しいです。

そのため、uwsgi が起動するたびに sock ファイルにアクセス許可を与える必要があります。だから今、以下のコマンドに従ってください

uwsgi -s /tmp/uwsgi.sock -w yolo:application -H /var/www/yolo/env --chmod-socket=666 

@susanpal とは少し異なるコマンドです。また、接続を維持するには、コマンドの最後に「 & 」を追加するだけです

uwsgi -s /tmp/uwsgi.sock -w yolo:app -H /var/www/yolo/env --chmod-socket=666 &
于 2015-06-28T16:29:43.147 に答える
-1

アプリケーションの nginx と uwsgi の両方の構成ファイルを投稿する必要があります (/etc/nginx/sites-enabled/ と /etc/uwsgi/ にあるファイル、またはそれらを配置した場所)。

通常、nginx アプリの構成に次のような行があることを確認します。

uwsgi_pass unix:///tmp/uwsgi.sock;

uwsgi 設定ファイルで同じソケット名を使用します。

socket=/tmp/uwsgi.sock
于 2014-02-17T13:50:12.300 に答える