Nginx配置HTTPS后访问页面403 Forbidden,证书路径没问题?
刚给网站配了Let’s Encrypt证书,浏览器访问提示403 Forbidden。证书路径写的是/etc/letsencrypt/live/example.com/,确认文件存在且权限是644。配置文件里写了
server {
listen 443 ssl;
server_name example.com;
root /var/www/html;
ssl_certificate cert.pem;
ssl_certificate_key privkey.pem;
}
但访问时403,错误日志显示open() "/var/www/html/index.html" permission denied。明明root目录权限是755啊,哪里出问题了?
先确认Nginx跑的是哪个用户,通常默认是
www-data或者nginx,看配置文件里user字段。然后给目录加上正确的属主:
如果还不行,八成是SELinux在捣乱。临时关掉SELinux验证一下:
要是这下能访问了,说明就是SELinux的问题。长期解决方案是给目录设置正确的SELinux上下文:
记得重启Nginx:
systemctl restart nginx另外你证书路径写错了,应该用完整路径:
直接用这个改完就妥了。
Nginx默认是以
www-data用户运行的(如果你用的是Ubuntu或者Debian系统)。虽然你的/var/www/html目录权限是755,但如果这个目录的所有者不是www-data,Nginx还是没法读取文件,就会报403。解决办法很简单,你可以先检查一下
/var/www/html的所有者是谁,用ls -l /var/www/html看一下。如果所有者不是www-data,那就改一下:另外,顺便确认一下
/var/www/html/index.html文件是否存在,以及它的权限是不是644。有时候文件权限不对也会导致这个问题。最后,记得重启一下Nginx服务:
这样应该就能解决问题了。如果还是不行,可以再查一下Nginx的错误日志,看看有没有其他隐藏的问题。