2016-02-15 46 views
5

私はこのトピックに関して多くの方法を試しましたが、まだ解決していません私の問題だから、私はこのポストが役に立つと思っています。Nginx + uWsgi + Django 'アップストリームに接続中に許可が拒否されました'(ソケット)

私はnginxのwtih uWSGIにジャンゴを設定するには、このサイトからチュートリアルを次のようだ:http://www.oliverelliott.org/article/computing/tut_setup_nginx_django/

uwsgi.iniファイル

[uwsgi] 
chdir=/home/ec2-user/project/awssite 
module=awssite.wsgi 
home=/home/ec2-user/project 
master=true 
processes=2 
socket=/home/ec2-user/project/awssite/awssite.socket 
chmod-socket=666 
vacuum=true 

など/ nginxの/サイト対応/ awssite_nginx.conf

upstream django { 
    server unix:///home/ec2-user/project/awssite/awssite.socket; 
} 
server { 
listen   8080; 
    server_name  localhost; 
    charset utf-8; 

    #max upload size 
    client_max_body_size 75M; 

    #Django media 
    location /media { 
      alias /home/ec2-user/project/awssite/awssite/media; 
    } 

    location /static { 
      alias /home/ec2-user/project/awssite/awssite/static; 
    } 

    location /favicon.ico { 
      log_not_found off; 
    } 

    location/{ 
      uwsgi_pass django; 
      include /home/ec2-user/project/awssite/uwsgi_params; 
    } 
} 

これは/var/log/nginx/error.log

でのエラーコードです0
2016/02/15 01:21:22 [crit] 22159#0: *3 connect() to unix:///home/ec2-user/project/awssite/awssite.socket failed (13: Permission denied) while connecting to upstream, client: CLIENT_IP, server: localhost, request: "GET /menu/ HTTP/1.1", upstream: "uwsgi://unix:///home/ec2-user/project/awssite/awssite.socket:", host: "HOST_IP:8080" 

注意:CLIENT_IP & HOST_IPはIPアドレスの値です。

これらは私が試してみましたとを働いていないものです。
1. chmod 755ホームディレクトリとuwsgi --socket awssite.socket --module awssite.wsgi --chmod-socket=666

2.自分のユーザーグループにユーザーnginxのの追加とuwsgi --socket awssite.socket --module awssite.wsgi --chmod-socket=664

3.変更を実行しているを実行していますこれらの新しい行を追加してiniファイルを作成します。
chown-socket=ec2-user:nginx uid=nginx gid=nginxuwsgi --ini uwsgi.iniをINGのは、これが「chownコマンドのために拒否された許可」で返しますが、私はsudoでコマンドを実行すると、私は(ユーザーec2-userの外)別のディレクトリ内のすべてのファイルを入れて

4(uWSGIは、システム全体のインストールされている)sudo: uwsgi: command not foundを取得します私は両方の権限
6.改名nginxの
を試みた意味664/666:私はrootとして実行しても、それが

5.パラメータ--uid nginx--gid nginx--chown-socket=nginx:nginx 注意してuwsgi --socket awssite.socket --module awssite.wsgi --chmod-socket=664/666を実行している動作しない場合を除きそれは私がそれらにアクセスすることはできません。 conf.defaultとnginx.conf.rpm新しいファイル(そうnginxが読める唯一のconfファイルはnginx.confです)

誰かがこの問題を解決する方法についていくつかの光を当ててください。私は試したことのあるメソッドを追加し続けますが、私がこのメソッドを開発している間はこの問題に取り組まなかったのです。ありがとう:)

@GwynBleidD答えのおかげで、私はついにそれを働かせました。 これはどのような作品です:

はuwsgi

upstream django { 
    server unix:///tmp/djangosocket/awssite.socket; 
} 
.... 

awssite_nginx.confの/ etc/nginxの/サイト対応 /tmp
で私のソケットファイルを保管しました。iniファイル

[uwsgi] 
chdir=/home/ec2-user/project/awssite 
module=awssite.wsgi 
home=/home/ec2-user/project 
master=true 
processes=2 
socket=/tmp/djangosocket/awssite.socket 
chmod-socket=666 
vacuum=true 

は、私は私のec2-user(ログインしているユーザー)グループnginxに追加しました。私はあなたのnginxのサーバーがuWSGIソケットにアクセスすることができない場合は、次の手順を履行しようと
chown -R ec2-user:nginx djangosocket
chmod g+rwx djangosocket

+0

chdirを 'chdir =/home/ec2-user/project'に変更できますか? – Selcuk

+0

@セルク・ノープはうまくいかなかった。私の理解では、 'chdir'はプロジェクト自体ではなく、プロジェクトのアプリへの道です。 –

+0

私は常にプロジェクトディレクトリにchdirしますが、私はhome引数を含めません。 – Selcuk

答えて

6

に応じてファイルのパーミッションを変更し

  1. は自宅であなた酔っぱらっを入れないでくださいあなたのシステム内の任意のユーザのディレクトリ、特にroot!いくつかのUNIXオペレーティングシステムは、そのディレクトリとrootの所有者以外の誰のためにもホームディレクトリへのデフォルトアクセスによってブロックしています。 nginxユーザをそのユーザのプライベートグループに追加すると(ほとんどのシステムでは、各ユーザが独自のメイングループを持っています)、それは役に立ちます。

  2. あなたのnginxサーバー(または使用している他のhttpサーバー)が実行されているユーザーとグループを確認してください。場合によってはwww-data、時にはnginx、時にはその他のものがあります。ソケットを作成するときは、uWSGIサーバーが実行されているユーザー名と、uWSGIのグループ名一致グループが一致することを確認します(またはスワップできます)。

  3. あなたのソケットのアクセス許可が660以上であることを確認してください。だれにもアクセス許可を与える必要はありません。

  4. nginxとuWSGIの両方が、ソケットが置かれているディレクトリとすべての親ディレクトリにアクセスする権限を持っていることを確認してください。

あなたのソケットのファイルのために良い場所は、(いくつかのシステムのために、それは/runまたはその両方である)/var/runディレクトリです。 ramdisk(tmpfs)としてマウントされることが多く、システム内の誰でも書き込み可能であるため、すべてのユーザーがここにソケットを作成してアクセスすることができます。あなたのシステムで何らかの理由でアクセスできない場合は、/tmpディレクトリにアクセスすることもできます。

ホームディレクトリからnginxから静的ファイルも直接提供している場合は、個人用グループにnginxを追加することを検討して、ホームディレクトリと静的ファイルへの読み取りアクセス権を持ちます。

+0

それは動作します! '/ var/run'ディレクトリは残念ながら書き込みアクセスを与えていませんでしたが、'/tmp'にソケットを置いていました。また、ユーザグループ 'ec2-user'にユーザ' nginx'を追加して、ソケットが置かれているディレクトリにアクセスできるようにしなければなりませんでした。簡単な質問:ユーザーグループ 'ec2-user'に' nginx'を置かなくてもこれを動作させる方法はありますか? (ちょうどnginxは 'ec2-user'がアクセスできる他のファイルやディレクトリにはアクセスできません) –

+1

はい、ディレクトリやソケットファイルをchownする必要があります。 – GwynBleidD

+0

'nginx'グループに' ec2-user'ユーザを追加しました。'chown -R nginx:nginx/tmp/testfolder'を実行して、私のuwsgi.iniファイル' sudo chown-socket = nginx:nginx'にこの行を追加しました。これは私が得ているエラーです。 'unixソケットを削除するとエラーが発生しましたunlink():パーミッションが拒否されました[core/socket.c line 198] bind():パーミッションが拒否されました[core/socket.c line 230]'(私は ' uwsgi --ini uwsgi.ini')どのようなアイデアですか? –

関連する問題