【网站】Nginx[warn]错误: an upstream response is buffered to a temporary file xxx while reading upstream的解决方法

如果采用的Nginx+Apache,请求会通过proxy到Apache。

例如:

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_redirect off;
    }

这就存在一个问题,也是导致服务器几次宕机的问题,在遇到突发的大频率请求下,尤其是对一些大图、视频之类的体积较大的文件进行请求,Nginx会写入、读取大量的缓存,出现类似的错误,导致硬盘IO暴涨,进而让低配置服务器卡死。

在Nginx的错误日志中就表现为大量的an upstream response is buffered to a temporary file XXX while reading upstream之类的日志,观察发现基本都是较大的视频、图片、JS文件等。

解决方法:

1、可以在Nginx.conf配置适当的缓存,启用proxy buffer(不写on似乎也是默认启用的),然后观察是否依旧存在类似的问题。

2、如果有大文件例如视频之类静态文件,可以将其进行静态处理,直接由Nginx进行处理,避免频繁的IO读写。

官方文档:https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffers

proxy_buffering on;
proxy_buffer_size 16k;
proxy_buffers 16 32k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;

在站点的Nginx配置中对静态文件进行单独处理,要指定网站的目录位置。

参考WordPress相关设置:https://developer.wordpress.org/advanced-administration/server/web-server/nginx/

root /var/html/wp; #定义网站根目录
    location ~ /\. {
    deny all;#拒绝访问隐藏文件
    }
    location ~* /(?:uploads|files)/.*\.php$ {
    deny all;#拒绝uploads、filrs文件夹的php执行
    }
    location = /favicon.ico {
    log_not_found off;#网站图标文件不记录日志
    access_log off;
    }
    location = /robots.txt {
    allow all;#允许robots文件访问
    log_not_found off;
    access_log off;
    }
    location ~* \.(?:jpg|jpeg|png|gif|webp|ico|css|js|woff2?|ttf|svg|eot|mp4|webm|mov|mp3)$ {
        access_log off;#对静态资源做nginx处理
        expires 30d;
        add_header Cache-Control "public";
        try_files $uri =404;
    }
   location / {#其他请求转发到apache
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $server_name;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_redirect off;
    }

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注