我运行一个执行一些基本图像处理操作的 Web 服务。
网络服务器首先接受用户上传的图片并临时存储。然后后端服务器通过 HTTP get 请求下载图片并执行实际处理。然后将其发送回网络服务器。然后用户下载图片。处理后的图片通常比原始图片大得多。
Web 服务偶尔会遇到 iowait 峰值,CPU 使用率过高,并且服务器会给出请求不可用超时错误。iowait 过高是由 nginx 引起的。
针对类似问题给出的解决方案建议打开 sendfile 并关闭 directio. 我也关闭缓冲区和 request_buffers因为我读到过这也可能是问题的根源。虽然这似乎可以减少问题的发生,但它仍然偶尔发生,我不知道为什么。
我已将配置文件复制到下面。有人对还需要更改什么有什么建议吗?这个问题真的让我抓狂。
server {
if ($http_user_agent ~ ^$){
return 503;
}
if ($http_user_agent ~* "Mozilla/4.0\ \(compatible;\ MSIE\ 6.0;\ Windows\ NT\ 5.1;\ SV1;\ .NET\ CLR\ 1.1.4322;\ .NET\ CLR\ 2.0.50727\)") {
return 503;
}
server_name [redacted: site];
access_log /var/log/[redacted: logfile];
error_log /var/log/[redacted: logfile];
listen 0.0.0.0:443 ssl;
ssl_certificate [redacted: cert address]
ssl_certificate_key [redacted: cert key]
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
error_page 502 /custom_502.html;
location = /custom_502.html {
root /usr/share/nginx/html;
internal;
}
location = /error_502.png {
root /usr/share/nginx/html;
}
client_max_body_size 300M;
proxy_request_buffering off;
location / {
# forward application requests to the gunicorn server
proxy_pass http://localhost:8001;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static {
proxy_max_temp_file_size 0;
directio off;
sendfile on;
alias [redacted: site location]/static;
expires 5d;
}
}
server {
if ($http_user_agent ~ ^$){
return 503;
}
if ($http_user_agent ~* "Mozilla/4.0\ \(compatible;\ MSIE\ 6.0;\ Windows\ NT\ 5.1;\ SV1;\ .NET\ CLR\ 1.1.4322;\ .NET\ CLR\ 2.0.50727\)") {
return 503;
}
if ($host = [redacted: address]) {
return 301 https://$host$request_uri;
listen 0.0.0.0:80;
server_name [redacted: site];
return 404;
client_max_body_size 300M;
}