Skip to content

项目部署后图片访问不到

问题描述

这是我的线上环境,在日常页面中,有两个图片访问不到,这些图片我没有使用三方框架,直接在页面中引用的,但是访问不到。 An image

排查思路

开发者工具

F12打开开发者工具发现下面报错,发现是403错误,这说明并不是图片路径错了,而是被禁止或者权限之类的问题

An image

但有一个问题是,我本机启动项目,访问项目一点问题都没有,只有在线上环境中才出现这个问题

那么可以想到,应该就是服务器中图片的权限可能存在一些问题

服务器

打开Shell链接工具,可以看到图片的权限是这样

An image

  • 文件所有者(root)有读(r)和写(w)权限。
  • 文件所属组(root)有读(r)权限。
  • 其他用户没有任何权限。

Nginx

该项目是由Nginx部署的,所以去查看nginx 的配置文件

An image

在 Nginx 的配置文件中,user nginx; 指令是用来设置运行 Nginx 工作进程的用户和组。

所以确实是权限的问题,nginx 运行用户是 nginx,而图片的权限是 root:root,所以 nginx 无法访问。

解决办法

修改Nginx运行用户

在nginx.conf 文件中,找到 user 指令,将 user nginx; 修改为 user root;

An image

重启nginx

shell
systemctl restart nginx

问题解决

再次刷新网页后,图片能正常访问

An image

修改图片权限

修改图片权限,让nginx 用户能够读就可以了

shell
sudo chgrp nginx 202404091.jpg 202404092.jpg  
sudo chmod g+r 202404091.jpg 202404092.jpg

这个我没有试,但问题都是权限上的问题,应该是也能解决的

提示

将Nginx配置为以root用户身份运行是非常不安全的做法,这会导致多个潜在的安全问题:

  • 权限提升风险:当Nginx以root用户身份运行时,任何通过Nginx执行的代码或访问的文件都将具有root权限。这意味着任何潜在的漏洞或恶意代码都可以利用这些权限执行任意操作,包括读取敏感文件、修改系统配置或执行恶意命令。

  • 潜在的资源滥用:root用户具有对系统的完全控制权,包括访问所有文件、启动和停止服务、更改系统配置等。如果Nginx被恶意利用或发生配置错误,它可能会导致系统资源的滥用,包括耗尽内存、CPU或磁盘空间,从而导致服务不可用或系统崩溃。

  • 不符合最小权限原则:在安全实践中,通常推荐遵循最小权限原则,即每个服务或应用程序只应拥有执行其任务所需的最小权限。将Nginx配置为root用户违反了这一原则,因为它赋予了Nginx不必要的和过高的权限。

  • 不符合安全标准:将Nginx配置为root用户也不符合许多安全标准和最佳实践。例如,许多安全审计和合规性检查都会检查是否有服务以root用户身份运行,并将其视为一个安全风险。

所以修改文件的权限,让nginx 用户能够读就可以了,这个才是一个相对的安全的做法。但我只想解决问题,剩下的等有时间优化就行了。