在centos中有一个user名为worker,所以在nginx.conf的配置中配置
user: worker
server{
location: /static/{
root /home/worker;
}
}
可是运行后,访问127.0.0.1/static/test.html,依然报错权限问题
2015/02/19 01:45:42 [error] 3634#0: *open()"/home/worker/static/test.html" failed (13: Permission denied),
nginx应该如何配置
1
Comphuse 2015-02-19 19:04:57 +08:00 3
假设你的 Nginx 配置没有任何问题,并且运行 getenforce 的结果是 Enforcing。
首先你要让 SELinux 允许 httpd[1] 访问用户目录。很简单,root 运行 setsebool -P httpd_enable_homedirs 。 "-P" 的意思是 permanent,不带 -P 的话系统重启后恢复默认配置。 然后你要修改 /home/user/static 的 SELinux context。告诉 SELinux,允许此目录被 httpd 访问: chcon -v -t httpd_user_content_t /home/user/static 没有意外的话应该就可以访问了。 简单易懂的关于 SELinux 的讲座: Red Hat 出的 SELinux 手册: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/SELinux_Users_and_Administrators_Guide/index.html 更多和 httpd 有关的 SELinux 开关: getsebool -a | grep httpd 安装 selinux-policy-devel,然后 man httpd_selinux [1] 在 RHEL/CentOS/Fedora 下, httpd 包是 apache。但 apache 和 nginx 的 SELinux context 都是:system_u:system_r:httpd_t:s0。 |
2
Comphuse 2015-02-19 19:07:50 +08:00 1
Sorry,漏掉了 boolean,是 setsebool -P httpd_enable_homedirs on
|
5
Comphuse 2015-02-19 19:41:25 +08:00
刚才查了以下,Nginx 你好像配错了......
http://wiki.nginx.org/UserDir |
6
veezzz OP @Comphuse 路径配置我是参考nginx的doc的 我去试试配置selinux 万分感谢你耐心的回答 有问题再请教你
|
7
kxmp 2015-02-19 23:58:24 +08:00 1
所有上层目录都要有读取权限
|
8
WildCat 2015-02-20 00:06:59 +08:00 via iPhone
我晕,我今天也遇到这个情况了,无论怎么改权限都不行。明天试试吧
|
9
ryd994 2015-02-20 01:13:10 +08:00 via Android 1
|
13
WildCat 2015-02-20 10:28:40 +08:00
@veezzz
linux 新手,刚才是把 home 路径又记错了。 重新试了下,假设 home 路径是 /root chomd -R a+r /root 没用 chomd -R a+x /root 可以解决。 楼上有说要读取权限,不知这里为何还得给执行权限。 自己是小采集站,就随意了,楼主如果是生产环境要小心了。 nginx version: nginx/1.6.2 |
14
veezzz OP @WildCat 我有个疑问 如果nginx的user设置为 username 那么 nginx的worker进程应该是以username用户执行的 按理说 username用户是有/home/username下的相关权限的 为什么不行呢
|
15
ryd994 2015-02-20 12:26:26 +08:00 via Android 1
|
17
ryd994 2015-02-20 12:29:22 +08:00 via Android 1
|