nginx失败(13:权限被拒绝)uwsgi(502坏的网关)

我无法在新的DigitalOcean液滴上运行我的应用程序。 机器运行CentOS 6.5

我的/etc/nginx/nginx.conf

 user nginx www-data; worker_processes 1; error_log /var/log/nginx/error.log; #error_log /var/log/nginx/error.log notice; #error_log /var/log/nginx/error.log info; pid /var/run/nginx.pid; (continues) 

我的myapp_nginx.conf

 server { server_name 104.xxx.x.xxx; listen 8080; charset utf-8; client_max_body_size 30M; location / { index index.html index.htm; root /home/webdev/mydevelopment/git/ers_portal; try_files $uri @app; } location /static { alias /home/webdev/mydevelopment/git/ers_portal/app/static; } location @app { include uwsgi_params; uwsgi_pass unix:/home/webdev/mydevelopment/git/ers_portal_uwsgi.sock; } } 

我的myapp_uwsgi.ini

 [uwsgi] master = true #user info uid = webdev gid = www-data #application's base folder base = /home/webdev/mydevelopment/git/ers_portal #chdir to this folder when starting #chdir = /home/webdev/mydevelopment/git/ers_portal #python module to import app = run_web module = %(app) home = /home/webdev/mydevelopment/venvs/ecodev_do pythonpath = %(base) #socket file's location socket = /home/webdev/mydevelopment/git/ers_portal/%n.sock #permissions for the socket file chmod-socket = 666 #the variable that holds a flask application inside the module imported at line #6 #uwsgi varible only, does not relate to your flask application callable = app #location of log files logto = /home/webdev/mydevelopment/git/ers_portal/logs/%n.log 

错误消息打印在nginx error.log每当我发出一个web请求到104.xxx.x.xxx:8080

 2014/11/19 23:14:47 [crit] 28090#0: *1 stat() "/home/webdev/mydevelopment/git/ers_portal/favicon.ico" failed (13: Permission denied), client: 71.211.xxx.xxx, server: 104.xxx.x.xxx, request: "GET /favicon.ico HTTP/1.1", host: "104.xxx.x.xxx:8080" 2014/11/19 23:14:47 [crit] 28090#0: *1 connect() to unix:/home/webdev/mydevelopment/git/ers_portal_uwsgi.sock failed (13: Permission denied) while connecting to upstream, client: 71.211.xxx.xxx, server: 104.xxx.x.xxx, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://unix:/home/webdev/mydevelopment/git/ers_portal_uwsgi.sock:", host: "104.xxx.x.xxx:8080" 

项目文件夹: drwxr-xr-x 6 webdev www-data 4.0K Nov 19 23:40 ers_portal

在该文件夹内的套接字: srw-rw-rw- 1 webdev www-data 0 Nov 19 23:45 ers_portal_uwsgi.sock

如果你有任何额外的信息,你需要让我知道。 谢谢!!

编辑

我改变了@Eugenebuild议的权限。 现在在我的/var/log/nginx/access.log看到

 [20/Nov/2014:01:37:58 -0500] "GET / HTTP/1.1" 502 574 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36" "-" 

/var/log/nginx/error.log我看到

 2014/11/20 01:38:27 [crit] 28639#0: *1 connect() to unix:/home/webdev/mydevelopment/git/ers_portal_uwsgi.sock failed (2: No such file or directory) while connecting to upstream, client: 71.21.my.local.ip, server: , request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/home/webdev/mydevelopment/git/ers_portal_uwsgi.sock:", host: "104.ser.ver.ip" 

var/log/nginx/access.log的favicon.ico拒绝(下面)不再显示

 "GET /favicon.ico HTTP/1.1" 502 574 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36" "-" 

解决了

经过几个小时的search,我发现我的拼写错误。 在/path/to/my/webapp/my_app_nginx.conf中读取的行

 location @app { include uwsgi_params; uwsgi_pass unix:/home/webdev/mydevelopment/git/ers_portal_uwsgi.sock; } 

应该读

 location @app { include uwsgi_params; uwsgi_pass unix:/home/webdev/mydevelopment/git/ers_portal/ers_portal_uwsgi.sock; } 

另外,在/etc/nginx/nginx.conf更改user nginx www-data; 回到user nginx;

还要确保在“顶级” /etc/nginx/nginx.conf中没有默认的服务器模块与你的应用的configuration冲突(在我的例子中是/path/to/my/webapp/my_app_nginx.conf ,它是/etc/nginx/conf.d/链接到/etc/nginx/conf.d/文件夹)。

得到教训…

  1. 不要灰心。 世界上最糟糕的(也许是第二糟糕的)感觉在很长的一段时间内无法解决问题。 特别是如果这是你的爱好,可能很容易觉得你是无能的,这个东西太难,你不够好。 坚持下去。
  2. 有条不紊 我正在变得疯狂,特别是在那里。 这导致睡觉没有真正的进展,并在同一个地方醒来。 把它全部写下来,logging你已经尝试了什么,并跟踪以前的变化。 如果ABABA是工作configuration,并且---B-是你正在寻找的变化,但是你忘了改变--B--回到--A-- ,你会重复并重复自己。 见#1
  3. 记住,有时要达成解决scheme的最重要的事情就是站起身走开。
  4. 不要打折你的同行(这个社区)的知识。 虽然他们可能没有针对您的特定问题的即时答案,但请记住,我们所有人都不像我们中的任何一个人那样愚蠢 (或者有些愚蠢的说法)。 我们都深深地爱上了这个星球上的一个问题。

看起来你没有适当的权限在/home/webdev/mydevelopment/git/ers_portal – 虽然ers_portal似乎有正确的755,但是有些目录没有。 检查从/ers_portal开始的所有目录对于www数据用户,或者它是组,还是对所有的都至less有5个。