AWS EC2 Ubuntu中Nginx无法访问home目录下网站文件问题排查
故障根因
和Nginx配置语法无关,是Ubuntu默认主目录权限限制导致的。
Ubuntu下普通用户的主目录(例如/home/ubuntu)默认权限为750,仅目录所有者、所属组拥有读写、遍历权限,其余系统用户完全没有访问权限。而Nginx默认的运行用户是www-data,既不是ubuntu用户本人,也不在ubuntu用户的附属组里,根本无法遍历进入/home/ubuntu路径下读取前端构建文件,访问时自然会返回403错误。/var/temp这类系统级路径默认开放了全局可读、可遍历权限,www-data用户可以正常读取路径下的文件,所以把站点根目录指到这里就能正常运行。
修复方案
二选一即可,优先选第一种,符合Linux服务部署规范:
- 方案1(推荐):将前端构建文件迁移到标准web服务目录
标准的web站点存放路径为/var/www/下,操作命令如下:
之后把Nginx配置里的# 创建站点专属目录 sudo mkdir -p /var/www/react-frontend # 把构建产物复制到目标目录 sudo cp -r /home/ubuntu/frontend/_work/react-frontend/react-frontend/build/* /var/www/react-frontend/ # 给Nginx运行用户分配目录权限 sudo chown -R www-data:www-data /var/www/react-frontend sudo chmod -R 755 /var/www/react-frontendroot字段值改为/var/www/react-frontend,执行sudo nginx -t验证配置无报错后,执行sudo systemctl reload nginx重载配置即可。 - 方案2(必须存放在home目录时使用):逐层开放路径遍历权限
注意不要直接给/home目录或用户主目录设置777权限,会带来严重的安全风险,只需要开放必要的遍历、读取权限即可,操作命令如下:
执行完同样重载Nginx配置即可。# 给/home/ubuntu添加其他用户遍历权限(仅允许进入目录,不允许列目录内容) sudo chmod o+x /home/ubuntu # 逐层给前端项目路径开放遍历权限 sudo chmod o+x /home/ubuntu/frontend sudo chmod o+x /home/ubuntu/frontend/_work sudo chmod o+x /home/ubuntu/frontend/_work/react-frontend sudo chmod o+x /home/ubuntu/frontend/_work/react-frontend/react-frontend # 给构建产物目录开放读、遍历权限 sudo chmod -R o+rX /home/ubuntu/frontend/_work/react-frontend/react-frontend/build
权限验证方法
改完权限可以直接切换到www-data用户测试文件读取能力,能正常输出文件内容就说明权限配置正确:
sudo -u www-data cat 你的站点index.html文件完整路径
注:你贴的能正常运行的配置中
listen [::]:80 default_server行末尾缺少分号,如果是实际线上配置会触发Nginx语法报错导致服务启动失败,大概率是粘贴时的笔误,注意核对配置语法。
内容的提问来源于stack exchange,提问作者Surya kant
相关产品推荐
相关产品推荐

