如果采用的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;
}
发表回复