Как записать ключи pre-master от tls-соединений, обрабатываемых nginx?
Здравствуйте. Мы состоим в реестре организаторов распространения информации и поэтому обязаны предоставлять в надзорный орган ключи tls сессий. Для таких случаев существует механизм по перехвату вызовов библиотеки openssl: https://git.lekensteyn.nl/peter/wireshark-notes/tree/src/ Суть простая - перед запуском демона, обрабатывающего TLS-соединения клиентов, через LD_PRELOAD подгружается эта библиотека и она сбрасывает в текстовый файл, указанный в переменой SSLKEYLOGFILE, ключи pre-master. Эта схема срабатывает с апачем, но с энжинксом ключи не пишутся. Нет ли идей или подсказок из-за чего это может быть и как вообще можно записать эти самые pre-master keys в энжинксе? Заранее спасибо. P.S. Пример файла с записанными ключами: # SSL key logfile generated by sslkeylog.c SERVER_HANDSHAKE_TRAFFIC_SECRET 077dca0cfc53f1ba5105d7e67e1cb8aa7fba40db73580bb0997498b3260a06da 080b47a6fea27728f15c4cb70bc7478aa4e9bf5b554e8018d9462a48fff90e9514ca6dc410154c730 CLIENT_HANDSHAKE_TRAFFIC_SECRET 077dca0cfc53f1ba5105d7e67e1cb8aa7fba40db73580bb0997498b3260a06da 883ec12435f3d53bc0e42f5fd0a26d006955064747786e21cda18bfa4e2b5fffe147860114036881d EXPORTER_SECRET 077dca0cfc53f1ba5105d7e67e1cb8aa7fba40db73580bb0997498b3260a06da 267a950066d3c4bcc2fd3bb50287b045c213737d018f15c166dc82ce7eab5f4b4dcb3939bc11db1ec7c918a321b5d9f7 SERVER_TRAFFIC_SECRET_0 077dca0cfc53f1ba5105d7e67e1cb8aa7fba40db73580bb0997498b3260a06da cdd2a750c617a721dc93595b99852a4a2436a4fb2f843617b51f7bc0de3b9a88faa5b2b5256fa4230df7fdf9f CLIENT_TRAFFIC_SECRET_0 077dca0cfc53f1ba5105d7e67e1cb8aa7fba40db73580bb0997498b3260a06da 0afb1f7f7c5d8fc9aefc8aae3111045d7e837e3f87de600fcf44a583f45a313d703235e6c80f51d1fa614d96f P.P.S. Запускаю энжинкс с этой библиотекой для записи ключей через systemd так: #cat /etc/systemd/system/nginx.service.d/override.conf [Service] Environment=SSLKEYLOGFILE=/tmp/premaster.txt Environment=LD_PRELOAD=/usr/local/lib/libsslkeylog.so Через lsof видно, что эта библиотека для записи ключей энжиксом подгружается (здесь я проверяю и мастер и воркер): # lsof -n -p 10313 |grep ssl nginx 10313 root memREG 254,1 442984 3255 /usr/lib/x86_64-linux-gnu/libssl.so.1.1 nginx 10313 root memREG 254,114224 20914 /usr/local/lib/libsslkeylog.so # lsof -n -p 10314 |grep ssl nginx 10314 www-data mem REG 254,1 442984 3255 /usr/lib/x86_64-linux-gnu/libssl.so.1.1 nginx 10314 www-data mem REG 254,114224 20914 /usr/local/lib/libsslkeylog.so но тем не менее ключи в файл при обращении к энжинксу по https не пишутся. ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
nginx и аппаратное шифрование
Привет! Сорри, если спрошу глупость, но... выбираю между двумя серверами - в одном установлен процессор с поддержкой аппаратного шифрования. Подскажите, будет ли прирост в производительности для сайтов работающих на https? Умеет ли nginx исполосовать эти возможности процессора? Спасибо. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,285422,285422#msg-285422 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: nginx полностью загружает весь процессор при reload'e
А с какими старыми клиентами не совместим 1.0.2g, который сам тоже не слишком свеж ? В мае был релиз 1.0.2s а g, это гдето в марте 16 года было. Если Вы про sslv2 то оно там есть.у меня специально для этих целей живет нгинкс собранный с 1.0.2m. если кастомный openssl собиратете через сборку nginx с --with-openssl , то ему можно пихнуть кастомные параметры в configure через --with-openssl-opt для всяких оптимизаций. если совсем какито раритеты, то пихните туда enable-weak-ssl-ciphers enable-ssl2.. Posted at Nginx Forum: https://forum.nginx.org/read.php?21,285412,285421#msg-285421 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: nginx полностью загружает весь процессор при reload'e
Нашел причину, проблема была в старом ssl - openssl 1.0.1u. perf top показывал: http://dl3.joxi.net/drive/2019/08/27/0030/2608/1985072/72/88257baf85.jpg Попробвал обычную версию 1.0.2g и проблемы ушли. Осталось уговорить менеджеров забить на 1% старых ssl клиентов. On 27/08/2019 18:08, Dmitry Sergeev wrote: Затестил. Без модуля vts тоже самое поведение. -- Kind regards Dmitry Sergeev Tel: +7 (951) 129-75-72 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: nginx полностью загружает весь процессор при reload'e
Затестил. Без модуля vts тоже самое поведение. -- Kind regards Dmitry Sergeev Tel: +7 (951) 129-75-72 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: nginx полностью загружает весь процессор при reload'e
Еще нюанс забыл указать. nginx компилировал с модулем vts. Возможно с ним проблема. Проверю это. -- Kind regards Dmitry Sergeev Tel: +7 (951) 129-75-72 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: nginx полностью загружает весь процессор при reload'e
Прошу прощения, особенности почтового клиента. Конфиг такой: user www-data; worker_processes auto; worker_cpu_affinity auto; worker_rlimit_nofile 65000; pid /var/run/nginx.pid; events { worker_connections 1; multi_accept off; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 10; types_hash_max_size 2048; server_tokens on; include /etc/nginx/mime.types; default_type application/octet-stream; client_body_timeout 60; client_header_timeout 60; send_timeout 60; reset_timedout_connection on; ## # Logging Settings ## access_log off; error_log /var/log/nginx/error.log; # # Caching FS # open_file_cache max=1; open_file_cache_errors on; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/octet-stream; ## # Maps ## map $status $status_error { "~*^(1|2|3)" 0; default 1; } ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; И пример конфига виртуальных хостов для nodejs и php: upstream nodejs_backend { ip_hash; keepalive 32; server server1:4201 weight=1; server server2:4201 weight=3; } log_format file_c escape=json '{"HOST":"$host","LOCATION":"$location","IP":"$remote_addr","PROJECT":"nodejs_backend","HTTP_STATUS":"$status","RESPONSE_TIME":"$request_time","UPSTREAM_CONNECT_TIME":"$upstream_connect_time","UPSTREAM_RESPONSE_TIME":"$upstream_response_time","REQUEST_METHOD":"$request_method","REQUEST_FILE":"$uri","ARGS":"$args","BYTES_SENT":"$bytes_sent","USER_AGENT":"$http_user_agent","HTTP_REFERER":"$http_referer","ENVIRONMENT":"production","AKAMAI_IP":"$http_true_client_ip","HEADER_ACCEPT":"$http_accept","HEADER_ACCEPT_LANGUAGE":"$http_accept_language","HEADER_CONTENT_LANGUAGE":"$http_content_language","HEADER_CONTENT_TYPE":"$http_content_type","BODY":"$request_body"}'; server { listen [::]:80; listen 80; # SSL listen [::]:443 ssl http2; listen 443 ssl http2; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; server_name nodejs_domain; root /var/www/nodejs_domain/docroot; ###Logs # Local logs access_log /var/log/nginx/nodejs_domain_access.log file_nodejs_backend if=$status_error; error_log /var/log/nginx/nodejs_domain_error.log; location = /robots.txt { set $location "robots"; return 200 "User-agent: *\nDisallow: /\n"; } location = /https:/nodejs_domain { set $location "ssl_checker"; return 200 "for ssl checker\n"; } location ~ /\.(git|svn|hg) { deny all; } location / { try_files /bpcZzfcaG82kpcm9Xxic8hWJ89YjqrJCRihmHGGmBqFnU6gV @backend; } location @backend { set $location "nodejs"; proxy_pass http://nodejs_backend; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_read_timeout 10s; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /.well-known { set $location "well-known"; root /usr/share/nginx/html; } } пример конфига для php: upstream php_backend { ip_hash; server server6:4301 weight=1; } log_format file_php_domain escape=json '{"HOST":"$host","LOCATION":"$location","IP":"$remote_addr","PROJECT":"php_backend","HTTP_STATUS":"$status","RESPONSE_TIME":"$request_time","UPSTREAM_CONNECT_TIME":"$upstream_connect_time","UPSTREAM_RESPONSE_TIME":"$upstream_response_time","REQUEST_METHOD":"$request_method","REQUEST_FILE":"$uri","ARGS":"$args","BYTES_SENT":"$bytes_sent","USER_AGENT":"$http_user_agent","HTTP_REFERER":"$http_referer","ENVIRONMENT":"production","AKAMAI_IP":"$http_true_client_ip","HEADER_ACCEPT":"$http_accept","HEADER_ACCEPT_LANGUAGE":"$http_accept_language","HEADER_CONTENT_LANGUAGE":"$http_content_language","HEADER_CONTENT_TYPE":"$http_content_type","BODY":"$request_body"}'; server { listen [::]:80; listen 80; listen [::]:443 ssl http2; listen 443 ssl http2; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; server_name php_domain; root /var/www/php_domain/docroot; access_log /var/log/nginx/php_domain_access.log file_php_domain if=$status_error; error_log /var/log/nginx/php_domain_error.log; location = /robots.txt { set $location "robots"; return 200 "User-agent: *\nDisallow: /\n"; } location = /https:/php_domain { set $location
Re: nginx полностью загружает весь процессор при reload'e
Hello! On Tue, Aug 27, 2019 at 04:10:31PM +0500, Dmitry Sergeev wrote: > Добрый день. Спасибо за ответ! Пожалуйста. Не надо отвечать мне лично, от этого карма портится. Спасибо. > На сервере всего 64GB памяти, nginx кушает обычно около 2GB при релоадет > не сильно больше - 2-3GB, swap не задействуется. Свободно памяти обычно > больше 60GB. > > Сейчас протестил. При релоаде съедает весь проц ровно 35-40 секунд. > Провел около 10 тестов, время всегда примерно такое. Значит проблема не в памяти, а в чём-то ещё. Что в конфиге? -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: nginx полностью загружает весь процессор при reload'e
Hello! On Tue, Aug 27, 2019 at 03:24:03PM +0500, Dmitry Sergeev wrote: > Версия: 1.14.2 > ОС: ubuntu 16.04 > Процессор: Intel Core i7-6700 CPU 3.40GHz > > Средняя нагрузка: 5 000 rps, пиковые значения 12 000 rps. Статики > практически нет, все запросы проксируются либо на бэкенды с nodejs через > proxy_pass либо на php-fpm через fastcgi_pass. Виртуальных хостов 16, > несколько из них имеют среднюю нагрузку 2K rps, остальные 500 rps. > > С бэкендами nodejs включен keepalive, с php отключен. > > Кроме nginx на сервере ничего нет. > > Проблема в том, что при reload'e конфигурации, несколько минут nginx > начинает жрать весь процессор, все ядра под 100%, и запросы начинают > обрабатываться медленно либо совсем сбрасываются, отсюда куча ошибок у > клиентов. Такая проблема наблюдается только на серверах, где много > виртуальных хостов (15-30). На серверах с аналогичной нагрузкой, но > например 1-3 виртуальными хостами. Таких проблем не наблюдаю. > > Может быть кто-нибудь подскажет, как можно это оптимизировать, что-то > подкрутить. Может можно как-то плавнее релоадить, чтобы медленее, но при > этом нагрузка на CPU как-то плавнее распределялась. Для начала - имеет смысл посмотреть на количество доступной памяти. При релоаде количество рабочих процессов увеличивается вдвое, и если памяти мало - система может уходить в свап с печальными последствиями. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
nginx полностью загружает весь процессор при reload'e
Версия: 1.14.2 ОС: ubuntu 16.04 Процессор: Intel Core i7-6700 CPU 3.40GHz Средняя нагрузка: 5 000 rps, пиковые значения 12 000 rps. Статики практически нет, все запросы проксируются либо на бэкенды с nodejs через proxy_pass либо на php-fpm через fastcgi_pass. Виртуальных хостов 16, несколько из них имеют среднюю нагрузку 2K rps, остальные 500 rps. С бэкендами nodejs включен keepalive, с php отключен. Кроме nginx на сервере ничего нет. Проблема в том, что при reload'e конфигурации, несколько минут nginx начинает жрать весь процессор, все ядра под 100%, и запросы начинают обрабатываться медленно либо совсем сбрасываются, отсюда куча ошибок у клиентов. Такая проблема наблюдается только на серверах, где много виртуальных хостов (15-30). На серверах с аналогичной нагрузкой, но например 1-3 виртуальными хостами. Таких проблем не наблюдаю. Может быть кто-нибудь подскажет, как можно это оптимизировать, что-то подкрутить. Может можно как-то плавнее релоадить, чтобы медленее, но при этом нагрузка на CPU как-то плавнее распределялась. -- Kind regards Dmitry Sergeev Tel: +7 (951) 129-75-72 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru