Tôi chạy một dịch vụ web thực hiện một số thao tác xử lý hình ảnh cơ bản.
Trước tiên, máy chủ web chấp nhận hình ảnh tải lên từ người dùng và tạm thời lưu trữ chúng. Sau đó, một máy chủ phụ trợ sẽ tải xuống hình ảnh thông qua yêu cầu nhận HTTP và thực hiện quá trình xử lý thực tế. Sau đó nó được gửi trở lại máy chủ web. Người dùng sau đó tải xuống các hình ảnh. Hình ảnh được xử lý thường lớn hơn đáng kể so với hình ảnh gốc.
Dịch vụ web thỉnh thoảng gặp đột biến iowait với mức sử dụng CPU cao và máy chủ đưa ra lỗi hết thời gian chờ yêu cầu không khả dụng. Iowait cao là từ nginx.
Giải pháp đưa ra cho các vấn đề tương tự khuyến nghị bật sendfile và tắt directio. tôi cũng đã tắt bộ đệm và request_buffers vì tôi đã đọc rằng đó cũng có thể là một nguồn gốc của vấn đề. Mặc dù điều này dường như làm giảm phần nào sự cố xảy ra, nhưng nó vẫn thỉnh thoảng xảy ra và tôi không biết tại sao.
Tôi đã sao chép các tệp cấu hình của mình bên dưới. Có ai có bất cứ đề nghị về những gì khác cần phải được thay đổi? Vấn đề thực sự khiến tôi phát điên.
người phục vụ {
nếu ($http_user_agent ~ ^$){
trả lại 503;
}
if ($http_user_agent ~* "Mozilla/4.0\ \(tương thích;\ MSIE\ 6.0;\ Windows\ NT\ 5.1;\ SV1;\ .NET\ CLR\ 1.1.4322;\ .NET\ CLR\ 2.0.50727\ )") {
trả lại 503;
}
server_name [đã xử lý lại: trang web];
access_log /var/log/[đã xử lý lại: logfile];
error_log /var/log/[đã xử lý lại: logfile];
nghe 0.0.0.0:443 ssl;
ssl_certificate [đã xử lý lại: địa chỉ chứng chỉ]
ssl_certificate_key [đã xử lý lại: khóa chứng chỉ]
bao gồm /etc/letsencrypt/options-ssl-nginx.conf; # được quản lý bởi Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # được quản lý bởi Certbot
error_page 502 /custom_502.html;
vị trí = /custom_502.html {
gốc /usr/share/nginx/html;
nội bộ;
}
vị trí = /error_502.png {
gốc /usr/share/nginx/html;
}
client_max_body_size 300M;
tắt proxy_request_buffering;
địa điểm / {
# chuyển tiếp yêu cầu ứng dụng đến máy chủ gunicorn
proxy_pass http://localhost:8001;
proxy_redirect tắt;
proxy_set_header Máy chủ lưu trữ $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
vị trí/tĩnh {
proxy_max_temp_file_size 0;
hướng tắt;
gửi tệp trên;
bí danh [đã xử lý lại: vị trí trang web]/tĩnh;
hết hạn 5d;
}
}
người phục vụ {
nếu ($http_user_agent ~ ^$){
trả lại 503;
}
if ($http_user_agent ~* "Mozilla/4.0\ \(tương thích;\ MSIE\ 6.0;\ Windows\ NT\ 5.1;\ SV1;\ .NET\ CLR\ 1.1.4322;\ .NET\ CLR\ 2.0.50727\ )") {
trả lại 503;
}
if ($host = [đã xử lý lại: địa chỉ]) {
trả lại 301 https://$host$request_uri;
nghe 0.0.0.0:80;
server_name [đã xử lý lại: trang web];
trả lại 404;
client_max_body_size 300M;
}