1、现象
业务需要使用支持https域名反向代理非http域名,在使用代理域名访问被代理资源时打不开情况。
参看nginx错误日志信息:
2021/10/21 14:08:06 [crit] 8053#0: *6015 open() "/usr/local/nginx/proxy_temp/0/06/0000000060" failed (13: Permission denied) while reading upstream, client: 58.247.110.222, server: performance.idgvalue.com, request: "GET /viewer/dashboard/webviewer.js?v=3.0.2957 HTTP/1.1", upstream: "http://112.124.55.24:80/viewer/dashboard/webviewer.js?v=3.0.2957", host: "performance.idgvalue.com", referrer: "http://performance.idgvalue.com/viewer/dashboard?dashboardguid=db86a2aa-9e43-4347-8bb7-075c58ba7957&token=ad3e1ffe-e965-8ab9-772d-a35e4581740d"
2、原因分析
从错误信息来看,
nginx
是在写代理 “临时文件”proxy_temp
下文件时候出现了权限不足
Permission denied
- nginx部分代理配置如下:
location /viewer {
proxy_pass http://235ly27139.51mypc.cn;
proxy_set_header Host $proxy_host;
# proxy_pass http://235ly27139.51mypc.cn;
# proxy_set_header Host $proxy_host;
}
这里没有配置:proxy_temp_file_write_size
属性。属性作用:当你访问资源信息超过该参数设置的大小时,nginx
会先将文件写入临时目录(nginx
安装目下/proxy_temp
目录)。所以这里我们可以配置该属性重启nginx
解决问题。但这不是问题证明解决方法。即无权限问题,我们查看进程及文件目录用户属性。
- 查看nginx目录下用户权限:
cd /usr/local/nginx
,发现proxy_temp
文件用户为root
权限
(base) [root@iZxpl4sxxnloovZ nginx]# ll
total 36
drwx------ 2 nobody root 4096 Jan 13 2021 client_body_temp
drwxr-xr-x 7 root root 4096 Oct 21 14:18 conf
drwx------ 2 nobody root 4096 Feb 13 2020 fastcgi_temp
drwxr-xr-x 2 root root 4096 Feb 13 2020 html
drwxr-xr-x 2 root root 4096 Nov 23 2020 logs
drwx------ 12 nobody root 4096 Jul 7 2020 proxy_temp
drwxr-xr-x 2 root root 4096 Dec 28 2020 sbin
drwx------ 2 nobody root 4096 Feb 13 2020 scgi_temp
drwx------ 2 nobody root 4096 Feb 13 2020 uwsgi_temp
产看启动nginx用户:ps -elf | grep nginx
, 进程worker
是nobody
用户
5 S root 8886 1 0 80 0 - 12248 sigsus Oct12 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
5 S nobody 11291 8886 0 80 0 - 12805 ep_pol 14:52 ? 00:00:00 nginx: worker process
0 R root 13460 6571 0 80 0 - 28179 - 15:24 pts/0 00:00:00 grep --color=auto nginx
3、解决方法
1、修改proxy_temp_file_write_size
限制大小,避免写入临时文件
2、修改proxy_temp目录用户权限和启动nginx worker权限一致,重启nginx: nginx -s reload
chown -R nobody:nobody /usr/local/nginx/proxy_temp
4、总结
① 遇到问题才是学习的深入的机会,请把问题当珍宝。
② 遇到问题不能只看现象,需要找到日志这类的切入点。
- 附 nginx 反向代理参数说明
proxy_connect_timeout 600; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 600; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_send_timeout 600; #后端服务器数据回传时间(代理发送超时)
proxy_buffer_size 32k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)proxy_temp_file_write_size 64k; #设定缓存文件夹大小
网友评论