поведение ssl on/off в разных server{}

umask umask на yandex.ru
Ср Мар 23 10:58:36 MSK 2011


Добрый день,

натолкнулся на проблему с SSL и никак не могу понять от чего это происходит.

Есть вот такая конфигурация 

====================8<=======================
http {
        server {
                listen 80 default;
                listen 443 ssl default;
                server_name _;

                ssl                  off;
                ssl_certificate      example.pem;
                ssl_certificate_key  example.key;

                location / {
                        rewrite . http://example.ru/ redirect;
                        break;
                }
        }

        server {
                listen       80;
                listen       443 ssl;
                server_name  example.ru;
                ssl                  on;
                ssl_certificate      example.pem;
                ssl_certificate_key  example.key;
		location / {
			return 500;
		}
	}
}
====================8<=======================

которая успешно работает и выполняет свою цель - если кто-то пришёл на наш IP (не по host'у) или прописал на какое-то левое DNS-имя наш IP-адрес, то nginx должен редиректить на домен example.ru. Причём не важно пришли ли к нам по HTTP или HTTPS (да, будет проблема с невалидным сертификатом, но пока для нас этот момент незначим).




В свою очередь конфигурация (ssl on в первом server{}):

====================8<=======================
http {
        server {
                listen 80 default;
                listen 443 ssl default;
                server_name _;

                ssl                  on; # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                ssl_certificate      example.pem;
                ssl_certificate_key  example.key;

                location / {
                        rewrite . http://example.ru/ redirect;
                        break;
                }
        }

        server {
                listen       80;
                listen       443 ssl;
                server_name  example.ru;
                ssl                  on;
                ssl_certificate      example.pem;
                ssl_certificate_key  example.key;
		location / {
			return 500;
		}
	}
}
====================8<=======================

Перестаёт работать ожидаемым образом и происходит следующее (при запросе http://pupkin.ru/, pupkin.ru прописан в hosts):
2011/03/23 07:56:53 [info] 90517#0: *15 client sent plain HTTP request to HTTPS port while reading client request headers, client: 10.0.32.11, server: _, request: "GET / HTTP/1.1", host: "pupkin.ru"






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