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

Ngineer nginx-forum на nginx.us
Вт Авг 31 10:57:42 MSD 2010


Доброго времени суток. Прошу помощи у
уважаемого сообщества.

Имеется 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/*;
}

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,125484,125484#msg-125484




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