Nginx отдает статику в режиме SSL в 2-3 раза медленее

Avatar 139
1066

Приветствую всех.

Задал аналогичный вопрос на другом форуме, ответа не получил, думаю может тут помогут.

И так, есть средненький сервер (AMD Opteron 2,8ГГц Dual Core / 8 Гб). На нем расположен не сильно незагруженый сайт с видео файлами. Все это работает под управлением Windows Server 2008 R2. Потребовалось подключить для сайта https. Что и было сделано. Но тут выяснилось, что скорость отдачи видео nginx v1.16 падает почти в два-три раза по сравнению с http. Первое, что я подумал - это процессор не справляется, но он загружен на 5-10%. Памяти свободной - полно. Качаю файл по http одна скорость, качаю по https - почти в 2-3 раза меньше. Вот конфиг отвечающий за шифрование:

listen 443 ssl;

ssl_certificate domain.crt;

ssl_certificate_key domain-key.txt;

ssl_session_timeout 1d;

ssl_session_cache shared:SSL:50m;

ssl_session_tickets off;

ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

ssl_protocols TLSv1.2 TLSv1.1 TLSv1;

ssl_prefer_server_ciphers on;

ssl_stapling on;

ssl_stapling_verify on;

ssl_trusted_certificate domain.crt;

resolver 8.8.8.8 8.8.4.4;

Сертификат на пробу взял бесплатный на Let's Encrypt. Он 4096 битный, может дело в этом?

Подскажите, что может так сильно ограничивать скорость отдачи? Я уже голову всю сломал, может дело в Windows + nginx? У кого-то есть опыт работы в такой связке?

Заранее спасибо.

D 963
#1

Пробовали менять протоколы и ключи шифрования?

У меня так, правда на линкусе

ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:RSA+3DES:!NULL:!RC4;

Не копируйте слепо, вероятно вам еще нужно активировать TLSv1.3

P.S. я мониторил логи, клиентов с TLSv1.1 TLSv1; набирается 5-6 чел. за день на трафике в 50.000

D 141
#2

Весь конфиг скиньте. Проверьте sendfile и sendfile_max_chunk. Секция с ssl находится в другом блоке server, и настройки могут быть другие.

Разработка и поддержка высоконагруженных проектов.
Avatar 139
#3

Dram, пробовал и раньше разные наборы протоколов, проверил ваш вариант настроек - вообще без изменений.

Проблема вроде как не в сервере/провайдере, т.к. тот же speedtest запущенный на сервере показывает честную скорость подключения в 100мбит.

Такое чувство, что какой-то буфер nginx не дает работать на полную скорость отдачи. Настройки nginx я уже вдоль и поперек разные перепробовал - становилось или медленнее или так же. Я уже начинаю думать, может действительно nginx под Windows так работает?

danforth, завтра скину.

Avatar 139
#4

Конфиг:

worker_processes 2;

events {

worker_connections 1024;

accept_mutex off; # вроде бы под windows так быстрее

}

http {

include mime.types;

default_type application/octet-stream;

log_format main_apache '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent"';

sendfile on;

tcp_nopush on;

tcp_nodelay on;

keepalive_timeout 65;

server {

listen 80;

listen 443 ssl;

server_name domain.ru;

root f:/domain.ru;

ssl_certificate domain.crt;

ssl_certificate_key domain-key.txt;

ssl_session_timeout 1d;

ssl_session_cache shared:SSL:50m;

ssl_session_tickets off;

ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

ssl_protocols TLSv1.2 TLSv1.1 TLSv1;

ssl_prefer_server_ciphers on;

ssl_stapling on;

ssl_stapling_verify on;

ssl_trusted_certificate domain.crt;

resolver 8.8.8.8 8.8.4.4 valid=600s;

access_log logs/access.log combined;

error_log logs/error.log;

server_tokens off;

client_max_body_size 500m;

sendfile on;

tcp_nopush on;

location / {

index index.php;

proxy_pass http://127.0.0.5:8888/;

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;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

location ~* ^.+\.(jpg|jpeg|gif|png|css|js|ico|mp3|swf)$ {

}

location /video/ {

root f:/domain.ru;

mp4;

}

}

}

Avatar 984
#5

grey109, Выбросить Nginx, перейти на Caddy и забыть про головную боль и нервное копание в сложных конфигах)))

Купить вечный впс (https://ddosov.net/lifetime-vds)
Avatar 150
#6
grey109:
процессор не справляется, но он загружен на 5-10%. Памяти свободной - полно. Качаю файл по http одна скорость, качаю по https - почти в 2-3 раза меньше.

кто ж вас знает чем и как качаете?

может на телефоне вообще? :] может на нем в это время проц на 100%... при 4096

с другого устройства та же картина?

надо первым делом попробовать на 2048 перейти.

и тут посмотреть что пишут https://www.ssllabs.com/ssltest/ по вашему серверу.

плюс, не знаю как на амд, но на интелах был нюанс, что AES инструкции у процессора могут быть выключены в bios.

без них сильно медленней оно шифрует.

как проверить не подскажу, все усугбляется тем что речь идет про windows...

однако да, факт что по https все будет заметно (или не очень, кому как) медленней.

лишняя работа же добавляется и на отдающей и на принимающей стороне.

если речь про видео, то http2 тут не поможет. но включить все же стоит.

Avatar 137
#7
kxk:
grey109, Выбросить Nginx, перейти на Caddy и забыть про головную боль и нервное копание в сложных конфигах)))

Детский сад

Avatar 984
#8

Vin_cent, Экономящий часы работы когда у вас сотни сайтов

R 30
#9
grey109:

...
Подскажите, что может так сильно ограничивать скорость отдачи? Я уже голову всю сломал, может дело в Windows + nginx? У кого-то есть опыт работы в такой связке?

Заранее спасибо.

http://nginx.org/ru/docs/windows.html


Версия nginx под Windows использует “родной” Win32 API (не эмуляцию Cygwin). В настоящий момент в качестве методов обработки соединений используются select() и poll() (1.15.9), поэтому не стоит ожидать высокой производительности и масштабируемости. В силу этого и ряда других известных проблем версия nginx под Windows рассматривается пока как бета-версия.
Avatar 139
#10

Дело похоже не в nginx. Сделал сертификат на 2048 бит - особой разницы нет. Заменил nginx на lighthttp - в принципе тоже без изменений.

Сейчас больше склоняюсь в проблеме Windows или провайдера.

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