За последние несколько дней в логах nginx стало появляться МНОЖЕСТВО тайм-аутов, и после многих проблем я никуда не попал.
Вот некоторые характеристики:
Сервер Ubuntu 14.04, работает Nginx 1.4.6 и PHP 5.6. Приложение (хотя и не относящееся к этой проблеме) работает на Laravel 5.2. Физические характеристики сервера: 2 процессора и 8 ГБ памяти. У меня может быть от 50 до 100 пользователей одновременно, и я ожидаю, что в ближайшем будущем он будет расти.
Я попытался добавить, увеличить и уменьшить таймауты, добавил буферы, добавил fastcgi_keep_conn on;
и отключил access.log, чтобы уменьшить используемые ресурсы. Я также отразил необходимые изменения в соответствующих местах в моем nginx.conf, sites-enabled / site.conf и php.ini. Однако эти тайм-ауты просто продолжают происходить. В моем приложении есть несколько запросов, которые очень тяжелы на сервере (большие запросы SQL, большие запросы API и т. П.), И именно на них всегда происходят тайм-ауты.
nginx.conf:
events {
worker_connections 2048;
multi_accept on;
}
http {
sendfile on;
# tcp_nopush on;
tcp_nodelay on;
types_hash_max_size 2048;
server_tokens off; # do not expose nginx version
server_names_hash_bucket_size 64;
server_names_hash_max_size 512;
include /etc/nginx/mime.types;
default_type application/octet-stream;
client_max_body_size 30M;
# Timeouts
# keepalive_timeout 15;
# send_timeout 15;
# client_header_timeout 15;
# client_body_timeout 15;
fastcgi_keep_conn on;
fastcgi_buffering on;
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
fastcgi_temp_file_write_size 16k;
fastcgi_max_temp_file_size 1024m;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 60;
fastcgi_read_timeout 60;
access_log off;
error_log /var/log/nginx/error.log;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
сайты с поддержкой / site.conf:
# non-ssl to ssl
server {
listen 80;
server_name site.com api.site.com;
return 301 https://$host$request_uri;
}
server {
server_name site.com api.site.com;
root /home/user/sites/site.com/public;
listen 443; # LISTEN PORT MARKER
# SSL PLACEHOLDERS
ssl on;
ssl_certificate /etc/ssl/site.com/2019/crt;
ssl_certificate_key /etc/ssl/site.com/2019/key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # disable SSLv3
charset utf-8;
client_header_buffer_size 1k;
large_client_header_buffers 2 1k;
access_log off;
# access_log /var/log/nginx/site.com-access.log; # uncomment to enable
error_log /var/log/nginx/site.com-error.log error;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location ~ /\. { deny all; }
index index.php index.htm index.html;
error_page 404 /index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
client_body_buffer_size 10k;
client_max_body_size 8m;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5.6-fpm.sock;
fastcgi_keep_conn on;
fastcgi_buffering on;
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
fastcgi_temp_file_write_size 16k;
fastcgi_max_temp_file_size 1024m;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 60;
fastcgi_read_timeout 60;
}
}
Дело в том, что я веб-разработчик, а не системный администратор. Я летал вслепую здесь, пытаясь бросить дротики в доску, которую я едва вижу. Я не уверен, что все сделал правильно, и все, что мне нужно, - это обновить мой сервер и / или оптимизировать свои запросы, или моя конфигурация nginx абсолютно ужасна.