Nginx配置HTTPS后访问页面403 Forbidden,证书路径没问题?

育柯酱~ 阅读 16

刚给网站配了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啊,哪里出问题了?

我来解答 赞 3 收藏
二维码
手机扫码查看
2 条解答
打工人雨涵
403问题大概率是权限配置或者SELinux搞的鬼。你root目录权限虽然755,但Nginx运行用户可能没权限读取。

先确认Nginx跑的是哪个用户,通常默认是www-data或者nginx,看配置文件里user字段。

然后给目录加上正确的属主:
chown -R www-data:www-data /var/www/html


如果还不行,八成是SELinux在捣乱。临时关掉SELinux验证一下:
setenforce 0


要是这下能访问了,说明就是SELinux的问题。长期解决方案是给目录设置正确的SELinux上下文:
chcon -R -t httpd_sys_content_t /var/www/html


记得重启Nginx:systemctl restart nginx

另外你证书路径写错了,应该用完整路径:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;


直接用这个改完就妥了。
点赞 1
2026-02-19 11:12
百里振艳
你这个问题我之前也碰到过,挺常见的。虽然你确认了证书路径和root目录的权限,但其实问题出在Nginx运行的用户权限上。

Nginx默认是以 www-data 用户运行的(如果你用的是Ubuntu或者Debian系统)。虽然你的 /var/www/html 目录权限是755,但如果这个目录的所有者不是 www-data,Nginx还是没法读取文件,就会报403。

解决办法很简单,你可以先检查一下 /var/www/html 的所有者是谁,用 ls -l /var/www/html 看一下。如果所有者不是 www-data,那就改一下:

sudo chown -R www-data:www-data /var/www/html


另外,顺便确认一下 /var/www/html/index.html 文件是否存在,以及它的权限是不是644。有时候文件权限不对也会导致这个问题。

最后,记得重启一下Nginx服务:

sudo systemctl restart nginx


这样应该就能解决问题了。如果还是不行,可以再查一下Nginx的错误日志,看看有没有其他隐藏的问题。
点赞 1
2026-02-14 09:27