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

umask umask на yandex.ru
Ср Мар 23 11:04:54 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"

При запросе https://pupkin.ru происходит следующее:

2011/03/23 08:01:04 [notice] 90517#0: *30 "." matches "/", client: 10.0.32.11, server: _, request: "GET / HTTP/1.1", host: "pupkin.ru"
2011/03/23 08:01:04 [notice] 90517#0: *30 rewritten redirect: "http://example.ru/", client: 10.0.32.11, server: _, request: "GET / HTTP/1.1", host: "pupkin.ru"
2011/03/23 08:01:04 [info] 90517#0: *31 client sent plain HTTP request to HTTPS port while reading client request headers, client: 82.179.192.158, server: example.ru, request: "GET / HTTP/1.1", host: "example.ru".




Возникает вопрос. Как работает ssl on/off, если в server{} заданы listen 80 и listen 80 ssl.

Подскажите, пожалуйста.



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