发生条件
- 页面被频繁的请求,并且请求返回数据大于64K
- 服务器`/var/lib/nginx/` nginx启动用户`www` 无法写入
报错日志
2021/06/07 15:19:35 [crit] 31512#0: *27346 open() "/var/lib/nginx/tmp/fastcgi/3/74/0000000743" failed (13: Permission denied) while reading upstream, client: 10.255.248.211, server: localhost, request: "GET / HTTP/1.0", upstream: "fastcgi://127.0.0.1:9000", host: "localhost", referrer: "https://localhost"
2021/06/07 15:19:45 [crit] 31515#0: *27357 open() "/var/lib/nginx/tmp/fastcgi/4/74/0000000744" failed (13: Permission denied) while reading upstream, client: 10.255.248.211, server: localhost, request: "GET / HTTP/1.0", upstream: "fastcgi://127.0.0.1:9000", host: "localhost", referrer: "https://localhost"
问题解决
服务器上赋nginx使用用户www可写入
chown www.www /var/lib/nginx/ -R
什么是 PHP-FPM 和 Fastcgi
- PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个实现了Fastcgi的程序,并且提供进程管理的功能。
- FastCGI是一个可伸缩地、高速地在HTTP服务器和动态脚本语言间通信的接口。
为什么你只在特别大的页面上会出现写入缓存文件
- 如果你配置的 FastCGI 缓冲区不足以将来自 PHP-FPM 的整个响应放入内存中,并且这种情况在大响应中会更频繁地发生,NGINX 将尝试写入部分对临时文件的响应。
为什么会写入不存成功
- nginx 通过yum安装默认是使用的*nginx*用户创建的目录,而在线上配置初始化后将使用用户改为*www*,所以www用户无法写入nginx创建的文件目录
优化nginx配置
提高缓存大小
fastcgi_buffer_size 256k; #: 缓存区大小,接收第一部分响应项目缓冲区大小
fastcgi_buffers 8 128k; #: 缓存区大小 和缓存区数量
fastcgi_busy_buffers_size 256k; #:繁忙时缓存区大小,一般是 fastcgi_buffers *2
fastcgi_temp_file_write_size 256k; #:临时文件大小
在nginx初始化中赋nginx使用用户www可写入
chown www.www /var/lib/nginx/ -R
查考资料
fastcgi 参数
PHP-FPM
PHP-FPM + nginx producing a permission denied, but only on certain large pages