安装
操作系统:CentOS 7.4
服务器:Nginx 1.12.2
问题:我的 nginx 安装可以从默认目录 提供文件,没有任何问题/usr/share/nginx/html
。不幸的是,当我使用自己创建的新文件夹 时,出现了 403 错误/www/html
。我应该查找什么?
尽管所有者不同,但我对两个文件夹的权限是相同的。
原始默认文件夹
drwxr-xr-x. 13 root root 155 Jan 8 09:25 usr
新的默认文件夹
drwxr-xr-x. 3 first first 18 Jan 15 10:45 www
我正在使用下面的精简nginx.conf
文件并且它可以正常工作。
events {}
http {
server {
listen 80;
server_name mydomain.com;
root /usr/share/nginx/html;
}
}
但是,当我更改nginx.conf
为使用该目录时/www/html
,出现 403 错误。
提前感谢大家的帮助!我是菜鸟,甚至不知道除了文件权限之外还要看哪里。
更新
SELinux 以强制模式启用。
[first@centos-2gb-sfo1-01 log]$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
第二次更新
我已更新nginx.conf
以包含错误日志。
events {}
http {
server {
listen 80;
server_name projournal.com;
root /www/html;
error_log /var/log/nginx.error.log;
}
}
nginx.error.log
在正确的目录中创建,但出现几次 403 错误后它仍然是空白的。
答案1
随着 SELinux 的强制执行,httpd 将被拒绝访问 /www/html,因为文件没有正确的上下文。
matchpathcon /www/html
/www/html system_u:object_r:default_t:s0
如果您确实想使用 /www/html,那么您可以向数据库添加适当的路径上下文
semanage fcontext -a -t "httpd_sys_content_t" /www/html(/.*)?
但是,有许多可以使用的默认位置已经定义了正确的上下文,例如 /var/www/html、/srv/www 等。
当您创建 /srv/www 时,您需要首先设置它的 SELinux 上下文,之后(通常)任何新文件和目录都会具有正确的上下文。
restorecon -v /srv/www
将“修复”/srv/www。但是您已经填充了 /srv/www,因此您需要为整个树设置文件上下文
restorecon -Rv /srv/www