Re: поведение ssl on/off в разных server{}
Igor Sysoev
igor на sysoev.ru
Ср Мар 23 11:36:40 MSK 2011
On Wed, Mar 23, 2011 at 11:04:54AM +0300, umask wrote:
> Письмо случайно ушло :(
>
>
> Повторю всё с начало и полность.
>
> натолкнулся на проблему с 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.
"ssl on" включает HTTPS для всех портов в данном сервере.
А поскольку порты более приоритетны, чем сервера, то и для
всех остальных серверов, где используются эти порты.
--
Igor Sysoev
http://sysoev.ru/en/
Подробная информация о списке рассылки nginx-ru