Добрый день.
Столкнулся с проблемой при нескольких vhost'ах и SSL. Possibly a bug.
Описание:
Nginx используется как reverse-proxy для HTTPS. Есть 2(3,5,10) виртуальных
хостов. Для них есть wildcard ssl cert. В первод домене(скажем
subdomain1.domain.com) подсоединяется wildcard ssl cert, но в
subdomain2.domain.com необходимо подключить сертификат конкретно для
определенного домена, т.к. этот домен, отзывается как на subdomain2.domain.com,
так и на domain2.com. По какой-то причине Nginx использует один и тот же
сертификат для обоих виртуальных хостов(тот что был подключен первым)
Конфигурация nginx:
# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/0.5.33
built by gcc 4.1.1 20070105 (Red Hat 4.1.1-52)
configure arguments: --with-zlib=../zlib-1.2.3 --prefix=/usr/local/nginx
--with-http_ssl_module
Конфиги:
/usr/local/nginx/conf/nginx.conf:
--------------------------------------
user root;
worker_processes 6;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include conf/mime.types;
default_type application/octet-stream;
include conf/http.conf;
include conf/vhosts.conf;
}
--------------------------------------
conf/http.conf:
--------------------------------------
sendfile on;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain;
output_buffers 1 100k;
postpone_output 10460;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 2250 120;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
client_header_buffer_size 1k;
client_max_body_size 150M;
large_client_header_buffers 4 4k;
server_names_hash_bucket_size 64;
--------------------------------------
conf/vhosts.conf:
--------------------------------------
include vhosts/subdomain1.domain.com.conf;
include vhosts/subdomain2.domain.com.conf;
--------------------------------------
В subdomain1.domain.com.conf'е задается SSL сертификат:
--------------------------------------
server {
listen 443;
server_name subdomain1.domain.com www.subdomain1.domain.com;
ssl on;
ssl_certificate certs/wildcard.crt;
ssl_certificate_key certs/wildcard.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://subdomain1.domain.com/ ;
proxy_set_header X-Real-IP $remote_addr;
}
location ~* ^.+\.(jpg|jpeg|gif|css|js)$ {
root /var/www/vhosts/sith-killer.x-shops.com/httpdocs;
access_log off;
expires 30d;
}
}
--------------------------------------
vhosts/subdomain2.domain.com.conf:
--------------------------------------
server {
listen 443;
server_name subdomain2.domain.com www.subdomain2.domain.com domain2.com
www.domain2.com;
ssl on;
ssl_certificate certs/domain2.com.crt;
ssl_certificate_key certs/domain2.com.key;
ssl_client_certificate certs/domain2.com.ca;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://domain2.com/ ;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header SSL YES;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location ~* ^.+\.(jpg|jpeg|gif|css|js)$ {
root /var/www/vhosts/domain2.com/httpdocs;
access_log off;
expires 30d;
}
}
--------------------------------------
Такое ощущение, что Nginx считывает переменную ssl_certificate только один раз,
а все последующие разы игнорирует. Хотя в таком случае он должен был сказать
что директива задана дважды.
P.S: не обращайте внимание на:
proxy_set_header SSL YES;
сделано для того, чтобы в дальнейшем в Апаче определить то, что пользователь
пришел с HTTPS через .htaccess, не прибегая к модификации кода. Всмысле вот так:
RewriteEngine on
RewriteCond %{HTTP:SSL} YES
RewriteRule .* - [E=HTTPS:on,L]
Всем спасибо.
--
Sincerely yours,
Driantsov Alexander,
Technical Support Engineer
Qualiteam Software
Glavpochtamt, p/o box 5152. [web site] http://www.x-cart.com/
432072 Ulyanovsk, Russia [ phone ] +7-(8422)-429037 (9:00-18:00 GMT +4)