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

grey109
На сайте с 15.06.2005
Offline
160
1216

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

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

И так, есть средненький сервер (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
На сайте с 28.06.2008
Offline
1101
#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

danforth
На сайте с 18.12.2015
Offline
153
#2

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

Junior Web Developer
grey109
На сайте с 15.06.2005
Offline
160
#3

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

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

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

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

grey109
На сайте с 15.06.2005
Offline
160
#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;

}

}

}

kxk
На сайте с 30.01.2005
Offline
970
kxk
#5

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

Ваш DEVOPS
Евгений Крупченко
На сайте с 27.09.2003
Offline
178
#6
grey109:
процессор не справляется, но он загружен на 5-10%. Памяти свободной - полно. Качаю файл по http одна скорость, качаю по https - почти в 2-3 раза меньше.

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

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

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

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

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

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

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

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

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

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

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

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

Детский сад

kxk
На сайте с 30.01.2005
Offline
970
kxk
#8

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

R
На сайте с 27.02.2016
Offline
38
#9
grey109:

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

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

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


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

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

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

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