一、问题描述
最近现场实施人员反馈有个功能不能正常使用,F12查看浏览器的控制台,提示net::ERR_CONTENT_LENGTH_MISMATCH 206 (Partial Content)的错误,
HTTP状态码206表示“部分内容”(Partial Content),表示服务器成功处理了部分客户端的请求。通常情况下,这个状态码是在客户端通过HTTP Range头部请求部分资源时返回的。如果服务器不支持范围请求的话,下面几个原因可能会导致这个问题出现
二、问题原因
- 服务器的磁盘满了,导致应用不能正常使用
- nginx缓存文件读取时没有权限(Permission denied)
- nginx的代理缓存区太小
三、问题解析及解决方案
1、 服务器的磁盘满了,导致应用不能正常使用
(1)df -h 命令查看磁盘的使用情况
(2)进入根路径,使用 du -sh * 命令查看哪个文件夹占用多
(3)发现usr文件夹占用最多,进入usr文件夹,再次执行 du -sh * 查询usr文件夹下占用大的文件夹,以此类推
(4)最终查到占用空间最大的文件,根据自己的实际情况进行删除无用的文件
df -h
2、nginx缓存文件读取时没有权限(Permission denied)
在单独打开hearder中css,js的网络地址是能打开的,所以排除了最简单的地址错误。前端项目是由nginx代理的,所以可以查看nginx的日志,进入${NGINX_HOME}\logs,查看error.log,得到如下信息:
[crit] 275197#0: *1543 open() “/usr/local/nginx/proxy_temp/4/30/0000000304” failed (13: Permission denied) while reading upstream
(1)proxy_temp文件夹是什么,做什么用的
Nginx通过代理缓存(proxy cache)提高了其反向代理服务器的性能。proxy cache是一种将反向代理服务器的响应缓存在本地磁盘上的技术,可以缓解上游服务器的压力并提高客户端的访问速度。
为了实现proxy cache功能,Nginx需要将代理服务器响应的数据写入本地磁盘上的临时文件。这些临时文件存储在proxy_temp文件夹中,以便于Nginx进行管理和维护。
proxy_temp文件夹中的临时文件由Nginx自动管理,当缓存不再需要时,Nginx会自动将其删除,以避免占用过多的磁盘空间。
(2)进入/usr/local/nginx/proxy_temp 文件夹,查看文件夹权限和nginx的用户
发现proxy_temp 文件夹的所有者是nobody用户,nginx是root用户
修改nginx配置文件,声明使用者
1、打开Nginx配置文件。默认情况下,Nginx配置文件位于/etc/nginx/nginx.conf。
2、在配置文件中找到“worker_processes”行,该行设置了工作进程的数量。在此行下面添加以下内容:
user yourusername;
其中,yourusername是您要用于运行Nginx的用户名。
3、保存并关闭文件。
4、检查Nginx配置文件是否存在语法错误。可以使用以下命令:
nginx -t
如果配置文件没有语法错误,将输出“nginx: configuration file /etc/nginx/nginx.conf test is successful”。
5、重启Nginx服务以使配置更改生效。可以使用以下命令:
sudo systemctl restart nginx
现在,Nginx将使用您指定的用户名来运行。
3、nginx的代理缓存区太小
在nginx.conf.js文件的http配置添加下面三行代码,然后保存重启nginx即可
proxy_buffer_size 128k;
proxy_buffers 32 128k;
proxy_busy_buffers_size 128k;
具体解析:
(1)proxy_buffer_size: 这个指令设置单个代理缓冲区的大小。它用于指定Nginx在向客户端发送响应之前缓冲区中存储的最大字节数。默认情况下,这个值为4K。
例如,如果您将proxy_buffer_size设置为128k,当Nginx代理从上游服务器接收响应时,它将使用最大128K的缓冲区存储响应,然后将其发送到客户端。
(2)proxy_buffers: 这个指令设置代理缓冲区的数量和大小。代理缓冲区是一种用于存储从上游服务器接收到的响应的内存区域。proxy_buffers指令由两个参数组成:缓冲区数量和每个缓冲区的大小。默认情况下,Nginx使用8个缓冲区,每个缓冲区大小为4K。
例如,如果您将proxy_buffers设置为32 128k,Nginx将使用32个缓冲区,每个缓冲区大小为128K。
(3)proxy_busy_buffers_size: 这个指令设置代理缓冲区中可用于存储响应的最大字节数。当Nginx在向客户端发送响应时,它将从代理缓冲区中取出缓冲区,如果缓冲区大小小于proxy_busy_buffers_size,则Nginx将尝试从上游服务器获取更多的响应,并将其存储在另一个缓冲区中。
例如,如果您将proxy_busy_buffers_size设置为128k,当Nginx代理使用缓冲区向客户端发送响应时,它将从代理缓冲区中取出缓冲区,并且只有在缓冲区大小小于128K时,Nginx才会从上游服务器获取更多的响应。
需要注意的是,这些代理缓冲区配置项可以根据具体情况进行调整,以达到最佳的性能和资源利用率。