Оптимизация Nginx
1.Выставляем кол-во процессов Nginx равное кол-ву процессоров в системе.
1 |
# cat /proc/cpuinfo | grep processor | wc –l |
1 |
# nano /etc/nginx/nginx.conf |
1 2 3 4 |
[...] worker_processes 1; worker_priority -3; [...] |
Максимальное количество соединений одного рабочего процесса. Следует выбирать значения от 1024 до 4096. Метод выбора соединений . Для Linux – epoll, для FreeBSD — kqueue. Ngix будет принимать максимально возможное количество соединений.
1 2 3 4 5 |
events { worker_connections 1024; use epoll; multi_accept on; } |
2. Включаем sendfile, tcp_nopush, tcp_nodelay, отключаем показ версии Nginx, увеличиваем types_hash_max_size вдвое(по умолчанию 1024).
1 |
# nano /etc/nginx/nginx.conf |
1 2 3 4 5 6 7 8 9 |
http { [...] sendfile on; tcp_nopush on; tcp_nodelay on; server_tokens off; types_hash_max_size 2048; [...] } |
3. Уменьшаем тайм-ауты
1 2 3 4 5 6 7 8 |
http { [...] keepalive_timeout 20; client_body_timeout 15; client_header_timeout 15; send_timeout 10; [...] } |
4.Включаем кеширование информации об открытых файлах. Определяет максимальное количество файлов, информация о которых будет содержаться в кеше. Определяет через какое время информация будет удалена из кеша. Будет кешировать информацию о тех файлах, которые были использованы хотя бы 2 раза. Будет кешировать информацию об отсутствующих файлах.
1 |
# nano /etc/nginx/nginx.conf |
1 2 3 4 5 6 7 8 |
http { [...] open_file_cache max=5000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; [...] } |
5.Включаем поддержку сжатия.
1 |
# nano /etc/nginx/nginx.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
http { [...] gzip on; gzip_static on; gzip_comp_level 5; gzip_min_length 1024; gzip_http_version 1.1; gzip_proxied any; gzip_vary on; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js; gzip_disable "msie6"; #gzip_buffers 16 8k; [...] } |
6.Если используются SSL-соединение,то включаем кеширование SSL-сессий, поддержку протокола HTTP/2(для Nginx с версии 1.9.6 и выше), а также некоторые настройки для улучшения безопасности
1 |
# nano /etc/nginx/nginx.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
http { [...] ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_dhparam /etc/ssl/certs/dhparam.pem; # https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ## Improves TTFB by using a smaller SSL buffer than the nginx default ssl_buffer_size 8k; ## Enables OCSP stapling ssl_stapling on; resolver 8.8.8.8; ssl_stapling_verify on; # Enable this if your want HSTS (recommended) # add_header Strict-Transport-Security max-age=15768000; [...] } |
1 2 3 4 |
server { listen <External-IP-address>:443 ssl http2; [] } |
Проверка поддержки HTTP-протокола второй версии WEB-сервером
https://tools.keycdn.com/http2-test
7. Измененяем параметры относительно Fastcgi-буферов
1 2 3 4 |
fastcgi_buffer_size 128k; fastcgi_buffers 256 16k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; |
8. Включаем кеширование браузерами клиента статических файлов, содержимое которых редко изменяется. Изменения делаем в секции servers в виртуальном хосте.
1 2 3 4 5 6 7 8 |
server { [...] location ~* ^.+\.(jpg|jpeg|gif|png|css|tgz|rar|doc|xls|exe|pdf|ppt|txt|tar|wav|bmp|rtf|js|svg|js|mp3|ogg|mpe?g|avi|zip|gz|bz2?|swf|ico)$ { expires +30d; add_header Cache-Control "public"; } [...] } |
9.Отключение ведения логов доступа к статическим файлам.
1 2 3 4 5 6 7 8 |
server { [...] location ~* \.(jpg|jpeg|png|gif|ico)$ { log_not_found off; access_log off; } [...] } |
Оптимизация PHP-FPM
1.Установливаем PHP-ускоритель(кеширование PHP-кода)( Xcache или APC — для PHP-версии 5.3 и ниже. Для версии 5.4+ настраивать нужно Opcache)
1 |
# apt-get install php-apc |
1 |
# nano /etc/php5/conf.d/20-apc.ini |
1 2 3 |
apc.shm_size=512M apc.enabled=1 apc.stat=1 |
Настройка Opcache описана в отдельной статье
https://kamaok.org.ua/?p=889
1 |
# cp /usr/share/doc/php-apc/apc.php /usr/share/nginx/html/ |
1 |
# /etc/init.d/php5-fpm restart |
2.Установка параметров php-fpm.
1 |
# nano /etc/php5/fpm/php-fpm.conf |
1 2 3 |
emergency_restart_threshold = 10 emergency_restart_interval = 1m process_control_timeout = 10 |
3.Использование Unix-сокета вместо TCP.
1 |
# nano /etc/php5/fpm/pool.d/www.conf |
1 2 |
listen = /var/run/php5-fpm.sock ;listen = 127.0.0.1:9000 |
1 |
# nano /etc/nginx/conf.d/vhost.conf |
1 2 3 4 |
location ~ \.php$ { #fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/var/run/php5-fpm.sock; } |
Увеличение максимального количества разрешенных подключений к Unix-сокету
1 |
# nano /etc/sysctl.conf |
1 |
net.core.somaxconn = 4096 |
1 |
# sysctl –p |
1 |
# sysctl -a | grep somaxconn |
Оптимизация TCP/IP-стека
1 2 3 4 5 6 7 8 |
net.core.rmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_wmem = 4096 16384 16777216 net.ipv4.tcp_fin_timeout = 20 net.ipv4.tcp_tw_reuse = 1 net.core.netdev_max_backlog = 10000 net.ipv4.ip_local_port_range = 15000 65000 |
Оптимизация MySQL
Используем скрипты для оптимизации настроек MySQL в файле my.cnf
1.mysqltuner.pl (http://blog.mysqltuner.com/)
1 |
# wget https://raw.github.com/rackerhacker/MySQLTuner-perl/master/mysqltuner.pl |
2.tuning-primer.sh (http://www.day32.com/MySQL/)
1 |
# wget http://www.day32.com/MySQL/tuning-primer.sh |
Анализ переменных MySQL(на основе SHOW VARIABLES) и вывод рекомендаций
pt-variable-advisor из набора Percona Toolkit (https://www.percona.com/doc/percona-toolkit/3.0/pt-variable-advisor.html)
Источник:
1.http://www.howtoforge.com/configuring-your-lemp-system-linux-nginx-mysql-php-fpm-for-maximum-performance
2.http://www.nginxtips.com/nginx-optimization-the-definitive-guide/