Nginx 报错403 排查与解决

目录

前言

今天领导让我部署一个前端项目,一顿操作报错访问报错403,让我们一起搞定他。

环境

CentOS 7 x86 的服务器上部署了 Nginx 服务器。

配置文件

我把前端项目打包后的 dist 文件夹放在了 /root/webUi/ 目录下,然后配置了 Nginx 的配置文件。nginx.conf 配置如下:

配置完成后,启动 Nginx 服务:

nginx

问题出现:403 Forbidden

当我兴高采烈地在浏览器中访问时,出现了 403 Forbidden 错误。

问题排查

检查文件权限

我的第一反应是检查文件权限问题。给 /root/webUi/ 目录赋予 755 权限:

但是问题依然存在,网站仍然返回 403 错误。已经给了读取权限,还是无法访问呢?

检查 Nginx 进程

接下来,检查 Nginx 的运行进程,看看是什么用户在实际运行 Nginx:

这时候我发现了问题:虽然 Nginx 的主进程是以 root 用户启动的,但工作进程(worker process)却是以 nobody 用户运行的!

检查 nginx.conf 文件,确认了配置中的第一行:user nobody;这就是问题的关键所在。

解决

问题根源

虽然 Nginx 是由 root 用户启动的,但实际处理请求的工作进程是以 nobody 用户运行的。在 Linux 系统中,nobody 用户是一个权限非常有限的用户,它无法访问 /root 目录下的文件,即使这些文件的权限是 755。

这是一个典型的 Linux 权限问题 - /root ,默认情况下其他用户是没有访问权限的

解决方案

方案1:移动网站文件到 nobody 用户可访问的目录(推荐)

将网站文件从 /root/webUi/ 移动到一个 nobody 用户有权限访问的目录,例如 /data/webUi/

# 创建新目录
mkdir -p /data/webUi/

# 复制文件
cp -R /root/webUi/* /data/webUi/

# 确保权限正确
chmod -R 755 /data/webUi/


然后修改 nginx.conf 中的 root 配置:

location / {
    alias   /data/webUi/dist/;
    index  index.html index.htm;
}
# 重新加载nginx
/usr/local/nginx/sbin/nginx  -s reload

成功解决

方案2:将 Nginx 工作进程用户改为 root(不推荐)

另一种方法是修改 nginx.conf 中的用户配置,将工作进程也设置为 root 用户:

user  root;

但是,这种方法存在安全风险,因为它赋予了 Nginx 工作进程 root 权限,如果 Nginx 被攻击者利用,可能会导致整个系统被入侵。所以,强烈不推荐这种做法!

总结

  1. Nginx 的主进程和工作进程可能使用不同的用户,这会影响文件访问权限
  2. 在 Linux 中,用户权限管理非常严格,特别是对于 /root 目录
  3. 不要盲目地将服务程序配置为使用 root 用户运行,这会带来安全风险

希望我的经验能对你有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值