[求助]nginx 托管 django 的静态文件,总是 403,按照其它的教程来修改配置、权限,自己也尝试了好多次,问题还是依旧,看看这边有没有能够提供解决思路的朋友,谢了

2017-09-13 17:14:30 +08:00
 fanfe
关于这个问题我在 stackoverflow 问了,但是得到的回复并不能解决问题
https://stackoverflow.com/questions/46169081/nginx-serving-django-static-and-media-files-403-forbidden

下面我描述一下配置和 log,希望能够得到解答,谢谢啦。

nginx.conf 配置:
#user www-data;
user me;
worker_processes 4;
pid /run/nginx.pid;
....

站点对应的 nginx 配置:
server {
add_header Access-Control-Allow-Origin *.mysite.com;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
listen 80;
server_name mysite.com;
access_log /var/log/nginx/hitek.access.log;
error_log /var/log/nginx/hitek.error.log;

location / {
proxy_pass http://127.0.0.1:8010;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

location ~ ^/media/ {
#alias /var/www/html/mysite/media/;
alias /home/me/website/mysite/media/;
#alias /home/www-data/website/website/mysite/media/;
expires 1h;
access_log off;
}

location ~ ^/static/ {
#alias /var/www/html/mysite/collected_static/;
alias /home/me/website/mysite/collected_static/;
#alias /home/www-data/website/website/mysite/collected_static/;
expires 1h;
access_log off;
include /etc/nginx/mime.types;
}
}

ls -alt 查看文件夹及权限,
drwxrw-rw- 8 me me 4096 Sep 11 14:43 mysite
drwxr-xr-x 6 me me 4096 Sep 8 14:30 ..
drwxrw-rw- 4 me me 4096 Sep 7 11:41 .

各层目录除了 /home 为 root 用户外,后续路径用户均为 me

error log 大致表现为以下:
...
directory index of "/home/me/website/mysite/collected_static/" is forbidden
...
4288 次点击
所在节点    问与答
24 条回复
zhuyao
2017-09-13 17:26:36 +08:00
要不给 nginx 赋予 root 的权限试一试
fanfe
2017-09-13 17:29:46 +08:00
@zhuyao 这个我试过了,同时也给了 chown -R root :root /home && chmod -R 777 或 766 home 但就是不行,不知道我又没有什么其它疏漏,反正就不行,我就觉得好奇怪。
eecjimmy
2017-09-13 18:10:51 +08:00
autoindex on;//自动显示目录
millson
2017-09-13 19:11:35 +08:00
selinux ?
jackysc
2017-09-13 19:20:59 +08:00
系统呢? CentOS 好像还需要关闭 SELINUX
akira
2017-09-13 19:21:03 +08:00
试试在那 media 和 collected_static 两个 目录下创建个空白的 index.html , 然后配置默认 index 为 index.html,看看什么情况.
zhuyao
2017-09-13 20:03:54 +08:00
@fanfe 你的 nginx 里面的配置怪怪的,server{
root:xxxxxxx
} 为啥没有
fanfe
2017-09-13 20:42:28 +08:00
@eecjimmy 这个要试一下
fanfe
2017-09-13 20:47:52 +08:00
@millson @jackysc debian 没有这个问题吧
fanfe
2017-09-13 20:49:28 +08:00
@akira 这个没试过,看到这感觉应该是 php 那类才用到吧
fanfe
2017-09-13 20:50:25 +08:00
@zhuyao 我试过了 这样会导致路径错误变成 404
ipwx
2017-09-13 20:52:40 +08:00
mysite 的权限不对。不能 rwxrw-rw-,要 rwxr-xr-x
ipwx
2017-09-13 20:53:25 +08:00
要让一个目录下面的文件能读取,它得有 x 权限。有没有 w 无所谓。
ipwx
2017-09-13 20:54:14 +08:00
然后 debian 下面的 nginx 运行账号是 www-data,而不是你 me。它没有读取权限,所以显示不了。
isbase
2017-09-14 00:44:27 +08:00
需要有读和执行的权限 755
Ge4Los
2017-09-14 00:54:57 +08:00
mysite 这个目录要有 x 的权限。 这样才能读目录下面的文件。
fanfe
2017-09-14 08:20:09 +08:00
@akira @eecjimmy 按照你们的来设置,结果 index.html 被重复重定向了,变成这样 ...b77eae605b92a47.png/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/index.html/
fanfe
2017-09-14 08:21:10 +08:00
@ipwx @isbase @Ge4Los 递归修改了还是不行,运行用户也改成默认的了。
hzlez
2017-09-14 09:16:30 +08:00
我用的 fedora, 过去我遇到过这样的问题的时候,就是因为 selinux.
我的解决办法是: `chcon -Rt httpd_sys_content_t /path/to/www`
具体检查操作可以参考一下下面的链接。
[参考链接: https://stackoverflow.com/questions/22586166/why-does-nginx-return-a-403-even-though-all-permissions-are-set-properly#answer-26228135]
fanfe
2017-09-14 10:02:19 +08:00
@hzlez debian 默认压根没装,也操作不下去。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/390432

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX