我使用这个教程来设置一个virtualenv和nginx服务器。 我完全按照所说的去做了,但是我仍然得到了一个
权限被拒绝(13)
尝试访问静态内容时出错。 我已经设置了我的静态目录和整个Django项目由www-data
拥有。
进一步说,如果我忽略静态内容,并试图让所有与皇帝一起运行,我遇到更多的权限被拒绝的错误。 现在我每次尝试访问该网站。
root 8704 0.0 0.0 62780 1260 ? Ss 16:19 0:00 nginx: master process /usr/sbin/nginx www-data 8705 0.0 0.0 63108 1680 ? S 16:19 0:00 nginx: worker process www-data 8706 0.0 0.0 63108 1680 ? S 16:19 0:00 nginx: worker process www-data 8707 0.0 0.0 63108 1680 ? S 16:19 0:00 nginx: worker process www-data 8708 0.0 0.0 63448 2276 ? S 16:19 0:00 nginx: worker process
以ubuntu启动uwsgi时: https ://gist.github.com/anonymous/f19997fd07c0237a7435当以www-data启动uwsgi时:
root@vmd2719:~/energy1/energydrinks# uwsgi --ini django.ini --uid www-data --gid www-data [uWSGI] getting INI configuration from django.ini open("./python27_plugin.so"): No such file or directory [core/utils.c line 3321] !!! UNABLE to load uWSGI plugin: ./python27_plugin.so: cannot open shared object file: No such file or directory !!! *** Starting uWSGI 1.9.6 (64bit) on [Mon Apr 15 16:24:49 2013] *** compiled with version: 4.6.3 on 15 April 2013 11:52:36 os: Linux-3.2.0-40-generic #64-Ubuntu SMP Mon Mar 25 21:22:10 UTC 2013 nodename: vmd2719 machine: x86_64 clock source: unix detected number of CPU cores: 1 current working directory: /root/energy1/energydrinks writing pidfile to /tmp/energy-master.pid detected binary path: /usr/local/bin/uwsgi setgid() to 33 setuid() to 33 chdir(): Permission denied [core/uwsgi.c line 2063] chdir(): Permission denied [core/uwsgi.c line 1249] chdir(): Permission denied [core/uwsgi.c line 1269]
Nginx的debugging日志访问一个静态文件:
2013/04/15 16:20:25 [debug] 8708#0: *1 http filename: "/root/energy1/energydrinks/static/jgrowl/jquery.jgrowl.js" 2013/04/15 16:20:25 [debug] 8708#0: *1 add cleanup: 0000000001F68C10 2013/04/15 16:20:25 [error] 8708#0: *1 open() "/root/energy1/energydrinks/static/jgrowl/jquery.jgrowl.js" failed (13: Permission denied), client: 109.193.75.142, server: .de, request: "GET /static/jgrowl/jquery.jgrowl.js HTTP/1.1", host: ".de:8000", referrer: "http://.de:8000/member/register/" 2013/04/15 16:20:25 [debug] 8708#0: *1 http finalize request: 403, "/static/jgrowl/jquery.jgrowl.js?" a:1, c:1 2013/04/15 16:20:25 [debug] 8708#0: *1 http special response: 403, "/static/jgrowl/jquery.jgrowl.js?" 2013/04/15 16:20:25 [debug] 8708#0: *1 http set discard body 2013/04/15 16:20:25 [debug] 8708#0: *1 xslt filter header 2013/04/15 16:20:25 [debug] 8708#0: *1 charset: "" > "utf-8" 2013/04/15 16:20:25 [debug] 8708#0: *1 HTTP/1.1 403 Forbidden
所以你的nginx运行在www-data
/root
里面www-data
…这不好。 /root
不能被普通用户访问(除非你是chmod +x
,这是一个坏主意)。
你应该把你的数据移到/srv/http
, /var/www
或/home/whatever
,而不是/root
。
如果您的nginx不在生产环境中,您可以添加“error_log / path / to / log debug” 然后尝试访问您的一个静态内容。 你会看到nginx试图加载到调试文件中。 这应该是有用的。
不要犹豫,在这里发布其内容,以帮助我们理解。