我正在安装 nginx。这是我遵循的步骤:
编辑/etc/nginx/nginx.conf。编辑后如下所示:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
...
http {
...
server {
listen 80 default_server;
server_name my_domain_name.com;
root /root;
...
}
gpasswd -nginx 根目录
chmod g+x /根
(抱歉,无法正确格式化为代码)
重启nginx服务
我访问 my_domain_name.com 并收到 403 错误。 /var/log/nginx/error.log内容:
"/root/index.html" is forbidden (13: Permission denied), client: 117.211.86.108, server: my_domain_name.com, request: "GET / HTTP/1.1", host: "my_domain_name.com"
哦!请不要禁用 SELinux。
/root
——这是一个陷阱!首先 — 您是否真的需要从
/root
提供文件?这实际上是 root user account 的主目录,而不是 web root。
相反,请使用
/var/www/html
或(我的偏好)/srv/www
。
如果您使用
/root
,请确保您没有暴露 ssh 密钥或 authorized_keys
文件、数据库密码或任何类似内容。使用 /root
来提供网页确实是一个坏主意。
(但是......这里没有羞耻:这显然令人困惑,并且由于“root”这个名字被用于多个概念,所以有点像历史设置的陷阱。)
其次,您应该正确配置它,而不是禁用 SELinux(在本例中,SELinux 可以保护您不做危险的事情)。在 Fedora 中,SELinux 策略的设计使 nginx 与其他网络服务器共享此策略,因此,使用
/srv/www/yoursite
作为根,
chcon -R -t httpd_sys_content_t /srv/www/yoursite
应该这样做。
(这个答案也应该适用于 Fedora Linux 下游的所有“企业 Linux”发行版 — 即 RHEL、CentOS Linux、CentOS Stream 等)
我在亚马逊 Linux 实例上,必须这样做
sudo chmod o+x /home/ec2-user/
sudo service nginx restart
不确定安全隐患是什么。
我通过禁用 SELINUX 并重新启动解决了这个问题
vi /etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled
重启