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