Nginx访问无权限的问题解决

 更新时间:2026年03月11日 09:57:55   作者:BullSmall  
Nginx启动后访问时服务器返回权限拒绝错误,原因是Nginx进程没有访问目标文件的权限,解决方法包括检查和修复文件及目录权限,下面就来详细的介绍一下,感兴趣的可以了解一下

Nginx启动后,访问时服务器返回的权限拒绝错误,核心问题是 Nginx 进程没有访问 /data/portal/html/index.html 文件的权限(错误码 13: Permission denied)。

错误原因分析

这个错误的本质是 Linux 系统的权限机制导致的:

  1. Nginx 通常以 nginxwww-datanobody 用户身份运行
  2. 该用户对目标文件 index.html 或其所在的目录(如 /data/portal/html/)没有读权限
  3. 也可能是目录的执行权限缺失(Linux 中要访问目录内文件,需要目录有执行权限)

解决方案

以下是一步步的排查和修复步骤:

1. 先确认 Nginx 运行用户

执行以下命令查看 Nginx 进程的运行用户:

ps aux | grep nginx
# 或更精准的方式
grep -r "user " /etc/nginx/nginx.conf /etc/nginx/conf.d/

输出示例(常见的是 nginxwww-data):

user nginx; # 这就是 Nginx 运行用户 

2. 检查文件和目录权限

# 检查 index.html 文件权限
ls -l /data/portal/html/index.html
 
# 检查上级目录权限(需要逐层检查)
ls -ld /data/portal/html/
ls -ld /data/portal/
ls -ld /data/

正常的权限示例(文件至少有读权限,目录至少有读 + 执行权限):

# 文件权限(-rw-r--r-- 表示所有用户可读)
-rw-r--r-- 1 root root 1234 Feb  9 10:00 /data/anti/apps/portal/html/index.html
 
# 目录权限(drwxr-xr-x 表示所有用户可进入+读取)
drwxr-xr-x 2 root root 4096 Feb  9 10:00 /data/anti/apps/portal/html/

3. 修复权限(核心步骤)

方案 1:直接修改文件 / 目录所属用户(推荐)

将文件和目录的所有者改为 Nginx 运行用户(假设是 nginx):

# 递归修改目录所属用户
chown -R nginx:nginx /data/portal/html/

# 确保文件有读权限,目录有读+执行权限
chmod -R 755 /data/portal/html/  # 目录权限
chmod 644 /data/portal/html/index.html  # 文件权限

方案 2:如果不想改所属用户,可开放其他用户的读权限

# 给所有用户添加读权限(文件)
chmod o+r /data/portal/html/index.html

# 给所有用户添加读+执行权限(目录)
chmod o+rx /data/portal/html/

4. 验证修复效果

# 切换到 Nginx 用户,尝试读取文件
su - nginx -c "cat /data/portal/html/index.html"

# 重启 Nginx 确保配置生效
systemctl restart nginx

# 测试访问
curl http://x.x.x.x:22080

如果能正常返回 index.html 的内容,说明权限问题已解决。

深度排查与修复步骤

1. 先完整检查权限链(关键!)

Linux 访问文件需要从根目录到目标文件的所有上级目录都有执行权限,只改 html 目录不够,需要逐层检查:

# 检查所有上级目录的权限(执行+读)
ls -ld /data
ls -ld /data/portal
ls -ld /data/portal/html

# 检查 index.html 文件本身
ls -l /data/portal/html/index.html

合格的权限标准

  • 所有目录:权限列必须包含 x(执行)和 r(读),比如 drwxr-xr-x(其他用户至少有 --x
  • index.html 文件:权限列必须包含 r(读),比如 -rw-r--r--

2. 修复全链路权限

如果发现某一级目录权限不足,执行以下命令统一修复:

# 给所有上级目录添加执行+读权限(递归修复/data/anti目录下所有目录)
chmod -R 755 /data/portal

# 单独确保文件是644权限(只读,更安全)
chmod 644 /data/portal/html/index.html

# 再次确认Nginx用户(比如nginx)拥有目录/文件的所有权
chown -R nginx:nginx /data/portal/html

3. 排查 SELinux 限制(CentOS/RHEL 系统必做)

这是最容易被忽略的原因!SELinux 会限制 Nginx 访问非默认网页目录:

# 1. 先临时关闭SELinux,测试是否解决问题
setenforce 0

# 2. 重新访问测试(curl或浏览器)
curl http://x.x.x.x:22080

# 3. 如果临时关闭后正常,说明是SELinux问题,永久修复(无需关闭SELinux):
# 给目标目录添加Nginx可访问的SELinux上下文
chcon -R -t httpd_sys_content_t /data/portal/html/

# 4. 恢复SELinux(可选,推荐开启)
setenforce 1

4. 验证 Nginx 用户能否读取文件

直接模拟 Nginx 用户访问文件,确认权限真的生效:

# 切换到nginx用户(如果提示无法切换,用su -s指定shell)
su - nginx -s /bin/bash -c "cat /data/portal/html/index.html"

# 如果输出index.html内容,说明权限完全正常;如果报错,继续排查

5. 重启 Nginx 并测试

# 重启Nginx加载权限变更
systemctl restart nginx

# 测试访问
curl -I http://x.x.x.x:22080
# 正常输出应该包含:HTTP/1.1 200 OK

额外注意事项

  1. SELinux 干扰:如果是 CentOS/RHEL 系统,SELinux 可能会阻止 Nginx 访问非默认目录,可临时关闭验证
    setenforce 0  # 临时关闭
    # 永久关闭(需重启):修改 /etc/selinux/config 中 SELINUX=disabled
    
  2. Nginx 配置检查:确保 Nginx 配置中 root 路径正确,且没有 deny all; 之类的限制规则。

总结

  1. 核心问题:Nginx 运行用户对 index.html 文件 / 所在目录无读 / 执行权限;权限问题不仅要检查目标文件 / 目录,还要检查所有上级目录的执行权限;
  2. 修复关键:要么将文件 / 目录所属用户改为 Nginx 用户,要么开放其他用户的读权限;
  3. 验证方法:切换到 Nginx 用户测试读取文件,重启 Nginx 后访问目标地址。验证时直接用 Nginx 运行用户访问文件,能快速定位是否真的解决了权限问题。
  4. CentOS/RHEL 系统需重点排查 SELinux 限制(最常见的 “隐形权限问题”);

到此这篇关于Nginx访问无权限的问题解决的文章就介绍到这了,更多相关Nginx访问无权限内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx限流配置的几种方案的使用小结

    Nginx限流配置的几种方案的使用小结

    Nginx为我们提供了请求限制模块、基于令牌桶算法的流量限制模块,可以方便的控制令牌速率,自定义调节限流,实现基本的限流控制,下面就来介绍一下
    2025-05-05
  • nginx配置文件使用环境变量的操作方法

    nginx配置文件使用环境变量的操作方法

    Nginx是一款开源代码的高性能HTTP服务器和反向代理服务器,同时支持IMAP/POP3/SMTP代理服务,相较于Apache、lighttpd具有占有内存少,稳定性高等优势,所以深受用户喜爱,今天小编给大家分享nginx配置文件使用环境变量的操作方法,感兴趣的朋友一起看看吧
    2021-06-06
  • Nginx+SSL搭建 HTTPS 网站

    Nginx+SSL搭建 HTTPS 网站

    最近在研究nginx,整好遇到一个需求就是希望服务器与客户端之间传输内容是加密的,防止中间监听泄露信息,但是去证书服务商那边申请证书又不合算,因为访问服务器的都是内部人士,所以自己给自己颁发证书,忽略掉浏览器的不信任警报即可。下面是颁发证书和配置过程。
    2016-08-08
  • Nginx禁止指定UA访问的方法

    Nginx禁止指定UA访问的方法

    这篇文章主要介绍了Nginx禁止指定UA访问的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • nginx中的limit_req限速设置配置示例

    nginx中的limit_req限速设置配置示例

    这篇文章主要介绍了nginx中的limit_req限速设置配置示例,本文直接给出配置文件例子,其中包含大量中文注释,需要的朋友可以参考下
    2015-03-03
  • Nginx服务器搭建反向代理全攻略

    Nginx服务器搭建反向代理全攻略

    这篇文章主要介绍了Nginx服务器搭建反向代理全攻略,强大的反向代理功能也是人们选择使用Nginx的主要原因之一,需要的朋友可以参考下
    2015-08-08
  • nginx查看连接数的几种方法小结

    nginx查看连接数的几种方法小结

    nginx作为目前最流行的web服务器之一,在许多生产环境都能看到他的踪影,有时候,我们需要统计nginx的连接配置,本文主要分享一下如何统计nginx的连接数,需要的朋友可以参考下
    2024-02-02
  • Nginx中定义404页面并且返回404状态码的正确方法

    Nginx中定义404页面并且返回404状态码的正确方法

    这篇文章主要介绍了Nginx中定义404页面并且返回404状态码的正确方法,本文在一次AJAX调用时发现了这个问题,服务器返回了一个404页页但没有返回404状态码,需要的朋友可以参考下
    2014-08-08
  • 服务器报错nginx 502 Bad Gateway的原因及如何解决详解

    服务器报错nginx 502 Bad Gateway的原因及如何解决详解

    项目启动时莫名其妙网站访问不了,502 Bad Gateway,下面这篇文章主要给大家介绍了关于服务器报错nginx 502 Bad Gateway的原因及如何解决的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Ubuntu16.04上为Nginx创建自签名SSL证书

    Ubuntu16.04上为Nginx创建自签名SSL证书

    SSL证书是实现HTTPS的关键组成部分,本文主要介绍了Ubuntu16.04上为Nginx创建自签名SSL证书,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05

最新评论