Re: 4 виртуальных SSL сервера на одном порту и потеря пакетов

Igor Sysoev igor на sysoev.ru
Вт Авг 31 11:41:27 MSD 2010


On Tue, Aug 31, 2010 at 02:57:42AM -0400, Ngineer wrote:

> Доброго времени суток. Прошу помощи у
> уважаемого сообщества.
> 
> Имеется Nginx на Ubuntu за которым работают 4
> Tomcat приложения на разных портах.
> Было необходимомо показать эти
> приложения в мир чарез HTTPS под разными
> URL, но все на одном порту 443.
> Серверный сертификат для всех серверов
> используется один, купленный на *.domain.com.
> Вся эта схема работает.
> 
> Проблемы начались при активном
> обращении пользователей к приложениям,
> время ответа через nginx исчисляется
> несколькими десятками секунд и общее
> количетсво потерь достигает 10%
> (измерялось эмулятором активности jmeter).
> Число соединений в состоянии CLOSE_WAIT и
> TIME_WAIT доходит до 300. При прочих равных
> при обращении к приложениям напрямую
> (без nginx) на соответствующий порт ни
> одной из вышеперечисленных проблем не
> наблюдается.
> После апдейта до последней стабильной
> версии nginx не стартовал корректно,
> сообщая, что порт 443 используется, т.е.
> из моих четырех виртуальных серверов
> стартовать мог только один. Очевидно
> это результат запрета renegotiation в 0.7.64
> (правильно ли я понимаю?), который
> должен препятствовать SSL атакам.
> Пришлось откатиться до версии 0.7.62. 
> Вопрос в следующем: значение каких
> параметров в nginx конфиге стоит
> проработать чтобы исправить ситуацию?
> есть ли возможность накатить
> исправления, которые затрагивают
> работу соединений не обновляя базовую
> версию? какие именно исправления могут
> помочь решить такую проблему?
> 
> Конфиг прилагается.
> 
> # nginx -V
> 
> nginx version: nginx/0.7.62
> built by gcc 4.3.3 (Ubuntu 4.3.3-5ubuntu4)
> configure arguments: --sbin-path=/usr/local/nginx/nginx
> --conf-path=/etc/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid
> --with-http_ssl_module --with-pcre=pcre-6.1 --with-zlib=zlib-1.2.3
> --with-openssl=openssl-0.9.8k
> 
> [b]nginx.conf[/b]
> 
> user www-data;
> worker_processes  4;
> 
> error_log  /nginx/log/error.log;
> pid        /var/run/nginx.pid;
> 
> events {
>     worker_connections  1024;
> }
> 
> http {
>     include       /etc/nginx/mime.types;
>     default_type  application/octet-stream;
>     access_log /nginx/log/access.log;
>     error_log  /nginx/log/nginx.error.log  debug;
> 
>     proxy_set_header X-Real-IP $remote_addr;
>     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
> 
>     log_format main      '$remote_addr - $remote_user [$time_local] '
>                          '"$request" $status $bytes_sent '
>                          '"$http_referer" "$http_user_agent" '
>                          '"$args" "$request_method" "$scheme" '
>                          '"$uri" "$request_body"' ;
> 
>     server_names_hash_bucket_size 128;
>     sendfile        on;
>     tcp_nopush     on;
> 
>     keepalive_timeout  0;
>     tcp_nodelay        on;
> 
>     client_body_timeout   600;
>     client_header_timeout 600;
>     send_timeout          600;
>     expires               600;
> 
>     ## Size Limits
>      client_body_buffer_size   50000k;
>      client_header_buffer_size 1000k;
>      client_max_body_size      50000k;
>      large_client_header_buffers 1 1000k;
> 
>     proxy_connect_timeout     600;
>     proxy_send_timeout        600;
>     proxy_read_timeout        600;
>     server {
>            listen 443;
>            server_name site.company1.domain.com;
>            ignore_invalid_headers off;
>            ssl on;
>            ssl_prefer_server_ciphers   on;
>            ssl_certificate /key_store/company.crt;
>            ssl_certificate_key /key_store/company.key;
>             location / {
>              proxy_pass  https://localhost:8006;
>            }
>     }
>     server {
>            listen 443;
>            server_name company1.domain.com;
>            server_name_in_redirect off;
>            ssl on;
>            ssl_certificate /key_store/company.crt;
>            ssl_certificate_key /key_store/company.key;
>             location / {
>              proxy_pass  https://localhost:8444;
>              proxy_set_header X-Real-IP $remote_addr;
>              proxy_set_header X-Forwarded-For
> $proxy_add_x_forwarded_for;
>             }
>     }
>     server {
>            listen 443;
>            server_name site.company2.domain.com;
>            ignore_invalid_headers off;
>            ssl on;
>            ssl_prefer_server_ciphers   on;
>            ssl_certificate  /key_store/company.crt;
>            ssl_certificate_key /key_store/company.key;
>             location / {
>              proxy_pass  https://localhost:8008;
>            }
>     }
>     server {
>            listen 443;
>            server_name company2.domain.com;
>            server_name_in_redirect off;
>            ssl on;
>            ssl_certificate /key_store/company.crt;
>            ssl_certificate_key /key_store/company.key;
>             location / {
>              proxy_pass  https://localhost:8446;
>              proxy_set_header X-Real-IP $remote_addr;
>              proxy_set_header X-Forwarded-For
> $proxy_add_x_forwarded_for;
>             }
>     }
>     include /etc/nginx/conf.d/*.conf;
>     include /etc/nginx/sites-enabled/*;
> }

http://nginx.org/en/docs/http/configuring_https_servers.html#optimization


-- 
Игорь Сысоев
http://sysoev.ru



Подробная информация о списке рассылки nginx-ru