nginx作为使用最广泛的一款反向代理软件,其性能也是非常优秀的,一般情况下,直接配置就可以使用,而且也都是稳定高效的,但是在实际应用中,对于不同的应用场景,总是会出现各种各样的问题,只能遇到问题再查找解决问题的解决办法了。
1、现象
前端页面提示打开文件失败:
意思就是加载文件失败。
https://bull.lab/owa/prem/15.1.1979.3/scripts/boot.owaframe.0.narrow.js?bo=1
直接打开文件的时候,文件是可以正常访问的。
查看error.log报错信息:
2024/07/30 15:29:02 [crit] 9021#9021: *251268 open() "/var/lib/nginx/tmp/proxy/6/66/0000000666" failed (13: Permission denied) while reading upstream, client: 10.8.13.42, server: bull.lab, request: "GET /owa/prem/15.1.1979.3/scripts/boot.owaframe.3.narrow.js HTTP/1.1", upstream: "https://10.11.24.44:443/owa/prem/15.1.1979.3/scripts/boot.owaframe.3.narrow.js", host: "bull.lab"
2、原因分析
从错误信息来看,
nginx
是在写代理 临时文件目录temp
下文件时候出现了权限不足
Permission denied
没有配置:proxy_temp_file_write_size
属性。属性作用:当你访问资源信息超过该参数设置的大小时,nginx
会先将文件写入临时目录(这里是:/var/lib/nginx/tmp)。所以这里我们可以配置该属性重启nginx
解决问题。但这不是问题证明解决方法。即无权限问题,我们查看进程及文件目录用户属性。
查看对应的目录权限:
#: ll /var/lib/nginx/
total 0
drwxr-x--- 7 root root 78 May 31 13:24 tmp
在没有出现问题的机器上是这样的,可以看到目录权限为root。
继续查看另外没有出现问题的机器上的信息如下,可以看到nginx用户具有相关权限。
# ll /var/lib/nginx
drwxrwx--- 7 nginx root 78 Jul 27 2022 tmp
查询进程的执行用户。
# ps -ef | grep nginx
root 29603 25150 0 09:18 pts/1 00:00:00 grep --color=auto nginx
nginx 91485 97955 0 Jul30 ? 00:00:00 nginx: worker process
nginx 91486 97955 0 Jul30 ? 00:00:00 nginx: worker process
nginx 91487 97955 0 Jul30 ? 00:00:00 nginx: worker process
nginx 91488 97955 0 Jul30 ? 00:00:00 nginx: worker process
nginx进程的用户为nginx。
3、解决方法
1、修改proxy_temp_file_write_size
限制大小,避免写入临时文件
proxy_temp_file_write_size 64k; #设定缓存文件夹大小
实际上,有时下载文件达到几百K,比如本次遇到问题是的文件原始大小为605K,所以添加这个配置,也只是缓解一般情况下的问题,不解决根本性的问题。
2、修改temp目录用户权限和启动nginx worker权限一致,重新加载配置(nginx -s reload
)
chown -R nginx:nginx /usr/local/nginx/temp
这种方式是合适的解决办法。
3. 修改nginx的启动用户,在nginx的配置文件nginx.conf文件中
user root;
设置完成后,重新加载配置(nginx -s reload
)即可。