You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04中Nginx虚拟主机403 Forbidden错误解决求助

解决Ubuntu 22.04中Nginx虚拟主机403 Forbidden错误的方法

以下是针对该问题的常见排查和解决步骤:

1. 检查文件与目录权限

Ubuntu 22.04中Nginx默认以www-data用户运行,需确保网站根目录及文件对该用户有读取权限:

  • 确认Nginx运行用户:
    ps aux | grep nginx
    
    查看worker进程所属用户,通常为www-data
  • 递归设置目录所有者为www-data:
    chown -R www-data:www-data /path/to/your/website/root
    
  • 调整目录权限为755(确保其他用户可读取):
    chmod -R 755 /path/to/your/website/root
    
  • 文件权限设为644:
    chmod -R 644 /path/to/your/website/root/*
    

2. 排查AppArmor限制

Ubuntu 22.04默认启用AppArmor,若网站根目录不在/var/www/这类默认允许的路径下,会被限制访问:

  • 查看AppArmor状态:
    apparmor_status
    
    确认/usr/sbin/nginx的profile处于enforce模式
  • 修改AppArmor规则,添加网站路径权限:
    编辑/etc/apparmor.d/usr.sbin.nginx,在/var/www/** r,行附近添加:
    /path/to/your/website/root/** r,
    
  • 重新加载AppArmor并重启Nginx:
    systemctl reload apparmor
    systemctl restart nginx
    

3. 验证Nginx配置正确性

  • 检查虚拟主机配置中的root路径是否为绝对路径且真实存在,例如:
    server {
        listen 80;
        server_name your-domain.com;
        root /var/www/your-site; # 确认此路径正确
        index index.html index.php; # 确保包含你的首页文件名
    }
    
  • 测试配置语法是否合法:
    nginx -t
    
    若有错误提示,修正后重启Nginx:
    systemctl restart nginx
    

4. 检查SELinux限制(若启用)

部分Ubuntu 22.04环境可能启用了SELinux,会阻止Nginx访问文件:

  • 查看SELinux状态:
    sestatus
    
  • 若状态为enabled,临时关闭测试:
    setenforce 0
    
    若错误消失,可永久关闭SELinux:编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,重启系统生效
  • 或为网站目录设置正确的SELinux上下文:
    chcon -R -t httpd_sys_content_t /path/to/your/website/root
    

5. 确认目录索引配置

若网站根目录没有指定的索引文件,且禁用了自动索引,会返回403:

  • 若需要允许目录列表,在虚拟主机配置中添加:
    autoindex on;
    
  • 若不需要目录列表,确保index指令包含你的首页文件名,比如index index.html index.htm;

内容的提问来源于stack exchange,提问作者Himanshu Makwana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:50:14