Подобрать конфиг для nginx

12
Likvik
На сайте с 29.07.2010
Offline
132
909

Здравствуйте.

Помогите подобрать оптимальный конфиг для nginx.

Intel Xeon E3-1275v5

4x RAM 16384 MB DDR4 ECC

2x SSD SATA 480 GB Datacenter

Порт 1 GBit/s

Debian 9 (nginx / php 7.3 / php-fpm / MySQL 5.7),

Несколько сайтов на WordPress.

На страницах в основном фото, 50-100 шт.

Именно эти фото грузятся относительно медленно.


user www-data;
worker_processes 8;
worker_rlimit_nofile 524288;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 65536;
multi_accept on;
use epoll;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
reset_timedout_connection on;

gzip on;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon application/vnd.ms-fontobject font/opentype application/x-font-ttf;
gzip_vary on;
gzip_proxied any;
gzip_disable msie6;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/vhosts/*/*.conf;
client_max_body_size 128m;
client_body_buffer_size 128k;
server {
server_name localhost;
disable_symlinks if_not_owner;
listen 80;
listen [::]:80;
listen 433;
listen [::]:433;
include /etc/nginx/vhosts-includes/*.conf;
location @fallback {
error_log /dev/null crit;
proxy_pass http://127.0.0.1:8080;
proxy_redirect http://127.0.0.1:8080 /;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffer_size 4k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
access_log off ;
}
}
}
Незнание порождает уверенность.
L
На сайте с 10.02.2015
Offline
221
#1

а) заюзать http2

б) может там рисунки по мегабайту?

в) ленивая загрузка рисунков

г) проверьте каким-то средством мониторинга, нету ли каких бутылочных горлышек.

возможно нужно тюнить ОС, нету ли ошибок при больших нагрузках.

LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#2

Так у вас всё отправляется на апатч. С чего ВДРУГ вы решили, что проблема в nginx? :)

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Likvik
На сайте с 29.07.2010
Offline
132
#3
livetv:

а) заюзать http2
б) может там рисунки по мегабайту?
в) ленивая загрузка рисунков
г) проверьте каким-то средством мониторинга, нету ли каких бутылочных горлышек.
возможно нужно тюнить ОС, нету ли ошибок при больших нагрузках.

а) используется, прописано отдельно для конфига домена

б) фото сжаты, по 100-200 кб

в) Что с ленивой что без. Пробовал, без разницы.

по gmetrix все более мение, ниже скрин дам.

Что знал проверил, сам сервер вообще такое чуство что отдыхает...

---------- Добавлено 17.12.2019 в 00:32 ----------

LEOnidUKG:
Так у вас всё отправляется на апатч. С чего ВДРУГ вы решили, что проблема в nginx? :)

Я не знаю в чем проблема, предположил что где то накосячил.

Почему все на апач? Вроде как у меня он не задействован.

Тут отдельный конфиг под каждый домен

server {

server_name site.ru www.site.ru;
charset off;
index index.php;
disable_symlinks if_not_owner from=$root_path;
include /etc/nginx/vhosts-includes/*.conf;
include /etc/nginx/vhosts-resources/site.ru/*.conf;
access_log /var/www/httpd-logs/site.ru.access.log;
error_log /var/www/httpd-logs/site.ru.error.log notice;
ssi on;
set $root_path /var/www/user/data/www/site.ru;
root $root_path;
gzip on;
gzip_comp_level 5;
gzip_types text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/bmp application/java application/msword application/vnd.ms-fontobject application/x-msdownload image/x-icon image/webp application/json application/vnd.ms-access application/vnd.ms-project application/x-font-otf application/vnd.ms-opentype application/vnd.oasis.opendocument.database application/vnd.oasis.opendocument.chart application/vnd.oasis.opendocument.formula application/vnd.oasis.opendocument.graphics application/vnd.oasis.opendocument.spreadsheet application/vnd.oasis.opendocument.text audio/ogg application/pdf application/vnd.ms-powerpoint application/x-shockwave-flash image/tiff application/x-font-ttf audio/wav application/vnd.ms-write application/font-woff application/font-woff2 application/vnd.ms-excel;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
location / {
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @php;
}

location = /rss.xml {
rewrite ^ /index.php?q=rss.xml;
}

# BEGIN W3TC Browser Cache
location ~ \.(css|htc|less|js|js2|js3|js4)$ {
expires 31536000s;
etag on;
if_modified_since exact;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public";
try_files $uri $uri/ $uri.html /index.php?$args;
}
location ~ \.(html|htm|rtf|rtx|svg|txt|xsd|xsl|xml)$ {
expires 3600s;
etag on;
if_modified_since exact;
add_header Pragma "public";
add_header Cache-Control "max-age=3600, public";
try_files $uri $uri/ $uri.html /index.php?$args;
}
location ~ \.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|webp|json|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|_otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|_ttf|wav|wma|wri|woff|woff2|xla|xls|xlsx|xlt|xlw|zip)$ {
root $root_path;
valid_referers none blocked server_names ~(site|yandex|google|yahoo|bing|facebook|subscribe|feedburner|mail|rambler|nigma|ask|qip|bing);
if ($invalid_referer) {
return 403;
}
expires 31536000s;
etag on;
if_modified_since exact;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public";
try_files $uri $uri/ $uri.html /index.php?$args;
}
location ~ \.(bmp|class|doc|docx|eot|exe|ico|webp|json|mdb|mpp|otf|_otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|pot|pps|ppt|pptx|svg|svgz|swf|tif|tiff|ttf|ttc|_ttf|wav|wri|woff|woff2|xla|xls|xlsx|xlt|xlw)$ {
etag off;
if_modified_since off;
try_files $uri $uri/ $uri.html /index.php?$args;
}
# END W3TC Browser Cache
# BEGIN W3TC Minify core
rewrite ^/wp-content/cache/minify/ /index.php last;
# END W3TC Minify core

}
location @php {
fastcgi_index index.php;
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@site.ru";
fastcgi_pass unix:/var/www/php-fpm/user.sock;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_read_timeout 5000;
fastcgi_buffer_size 128k;
fastcgi_buffers 4096 64k;
}
return 301 https://$host:443$request_uri;
gzip_disable "msie6";
expires 365s;
listen IP:80;
listen [IP]:80;
}
server {
server_name site.ru www.site.ru;
ssl_certificate "/var/www/httpd-cert/user/site.ru_le1.crtca";
ssl_certificate_key "/var/www/httpd-cert/user/site.ru_le1.key";
ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
ssl_session_timeout 24h;
ssl_session_cache shared:SSL:2m;
ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
charset off;
index index.php;
disable_symlinks if_not_owner from=$root_path;
include /etc/nginx/vhosts-includes/*.conf;
include /etc/nginx/vhosts-resources/site.ru/*.conf;
access_log /var/www/httpd-logs/site.ru.access.log;
error_log /var/www/httpd-logs/site.ru.error.log notice;
ssi on;
set $root_path /var/www/user/data/www/site.ru;
root $root_path;
listen IP:443 ssl http2;
listen [IP]:443 ssl http2;
gzip on;
gzip_comp_level 5;
gzip_disable "msie6";
gzip_types text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/bmp application/java application/msword application/vnd.ms-fontobject application/x-msdownload image/x-icon image/webp application/json application/vnd.ms-access application/vnd.ms-project application/x-font-otf application/vnd.ms-opentype application/vnd.oasis.opendocument.database application/vnd.oasis.opendocument.chart application/vnd.oasis.opendocument.formula application/vnd.oasis.opendocument.graphics application/vnd.oasis.opendocument.spreadsheet application/vnd.oasis.opendocument.text audio/ogg application/pdf application/vnd.ms-powerpoint application/x-shockwave-flash image/tiff application/x-font-ttf audio/wav application/vnd.ms-write application/font-woff application/font-woff2 application/vnd.ms-excel;
expires 365s;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
location / {
location ~ [^/]\.ph(p\d*|tml)$ {
try_files /does_not_exists @php;
}
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}

location = /rss.xml {
rewrite ^ /index.php?q=rss.xml;
}
}
# BEGIN W3TC Browser Cache
location ~ \.(css|htc|less|js|js2|js3|js4)$ {
expires 31536000s;
etag on;
if_modified_since exact;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public";
try_files $uri $uri/ $uri.html /index.php?$args;
}
location ~ \.(html|htm|rtf|rtx|svg|txt|xsd|xsl|xml)$ {
expires 3600s;
etag on;
if_modified_since exact;
add_header Pragma "public";
add_header Cache-Control "max-age=3600, public";
try_files $uri $uri/ $uri.html /index.php?$args;
}
location ~ \.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|webp|json|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|_otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|_ttf|wav|wma|wri|woff|woff2|xla|xls|xlsx|xlt|xlw|zip)$ {
root $root_path;
valid_referers none blocked server_names ~(site|yandex|google|yahoo|bing|facebook|subscribe|feedburner|mail|rambler|nigma|ask|qip|bing);
if ($invalid_referer) {
return 403;
}
expires 31536000s;
etag on;
if_modified_since exact;
add_header Pragma "public";
add_header Cache-Control "max-age=31536000, public";
try_files $uri $uri/ $uri.html /index.php?$args;
}
location ~ \.(bmp|class|doc|docx|eot|exe|ico|webp|json|mdb|mpp|otf|_otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|pot|pps|ppt|pptx|svg|svgz|swf|tif|tiff|ttf|ttc|_ttf|wav|wri|woff|woff2|xla|xls|xlsx|xlt|xlw)$ {
etag off;
if_modified_since off;
try_files $uri $uri/ $uri.html /index.php?$args;
}
# END W3TC Browser Cache
# BEGIN W3TC Minify core
rewrite ^/wp-content/cache/minify/ /index.php last;
# END W3TC Minify core

location @php {
fastcgi_index index.php;
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@site.ru";
fastcgi_pass unix:/var/www/php-fpm/user.sock;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_read_timeout 5000;
fastcgi_buffer_size 128k;
fastcgi_buffers 4096 64k;
}
}
jpg 33333.jpg
Likvik
На сайте с 29.07.2010
Offline
132
#4

Дело в том что htop и atop показывают что сервер как бы вообще отдыхает. Нет нагрузки но сайты тупят. Канал тоже загружается на пару Мб.

Здесь скрины немного с другого сервера, но суть та же. Таких у меня 4. Проблема одинаковая. Сайти подтупливают а нагрузки как таковой и нет.

Поэтому и думаю что гдето что то я не так настроил, тоисть не использую полностью ресурсы.

Или же это такая проблема у хетзнера, тойсть переезд на локацию поближе к ЦА, Россия, СНГ, решит ли прблему.

Я у хетзнера уже лет так 3-4, проблем никога подобных не было. Все открывалось бысто на серверах попроще.

jpg 1111.jpg
jpg 22222.jpg
jpg 44444.jpg
S
На сайте с 23.05.2004
Offline
316
#5

Я бы начал с малого:

1. делаем на nginx чистый домен/сабдомен, без проксирование, без try files и прочего.

2. Делаем там одну простую статическую страницу с десятком фотографий и на ней тестируем.

Сейчас по конфигам свыше вообще не понятно, что откуда грузит.

P.S. простой конфиг - это как


server {
listen 80;
server_name test.site.com;
root /www/test;

location = /favicon.ico {
log_not_found off;
access_log off;
try_files /favicon.ico =204;
}

}
Это просто подпись.
LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#6

Без урла трудно судить, что там "подтупливает".

skapunker
На сайте с 15.01.2014
Offline
215
#7

тут проблема не в нджинкс, а в двигателе или в самомом серевере. Ну или картинки по 10 мб

Избавиться от ботов на сайте https://clck.ru/38bp4f
Likvik
На сайте с 29.07.2010
Offline
132
#8

Почему начал копать в сторону Ngnix? Так он отдает эти самые картинки, правильно?

По дискам скорость нормальная, SSD, это откидываем. По top видно что на них нагрузка минимальна.

Ширина канала тоже не забита, и скорости хватает.

Картинки все сжаты, там по gmetrix видно общий вес страницы. В общем страницы по 7-10 мб.

К сожалению, для себя же, урл дать не могу.

На данный момент подправил немного конфиг ngnix, грузится нормально стало. Но это под ночь и под утро трафик спал, поэтому рано судить.

skapunker
На сайте с 15.01.2014
Offline
215
#9

вообще 50-100 фото на странице это много. Тут как вариант использовать какой нибудь скрипт, который будет подгружать картинки по мере необходимости.

D
На сайте с 28.06.2008
Offline
1101
#10

Включите медленные запросы мускуля. Время выставите на 0,5 сек. и смотрите.

По описание мне первое что на ум пришло - кривые долгие запросы.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий