Skip to content

Nginx with SSL

andyceo edited this page Feb 10, 2016 · 2 revisions

Эта статья предполагает, что у вас уже есть SSL-сертификат. Если у вас его нет и вы не знаете как его получить или что это такое, см. статью SSL.

Настройка Nginx и SSL

См. как сделана роль andyceo.nginx, а конкретно шаблон nginx.vhost.www.ssl.conf.j2

Есть так называемый сервер по умолчанию для порта, например для порта 443. какой бы поддомен ты не набрал через https, запрос придет в этот сервер. и тогда надо либо сказать что такого адреса нет, либо средиректить на главную этого сервера.

Также есть тонкость, если не указываешь 443 ssl; причем неважно, неправильно ли ты не указал только на одном каком-то сервере (директиве server) - не работать будут все.

Если ты пишешь в хосте ssl on; но не указываешь ssl_certificate - нжинкс не запустится в логах будет:

no "ssl_certificate" is defined for the "ssl" directive in /etc/nginx/sites-enabled/default:25

Если пишешь один сервер, который слушает и 80, и 443, и пишешь в нем ssl on; то будет следующая ошибка в браузере:

400 Bad Request The plain HTTP request was sent to HTTPS port.

Документация:

If HTTP and HTTPS servers are equal, a single server that handles both HTTP and HTTPS requests may be configured by deleting the directive “ssl on” and adding the ssl parameter for *:443 port

Т.е. нельзя использовать ssl on; в сервере, настроенном на какие-либо еще порты.

Директива listen 443 ssl; заменяет директиву ssl on; в этом сервере, т.е. ее можно не писать (а можно и писать, дополнительно).

Ссылки:

Возможные ошибки

...были довольно подробно описаны в статье. Однако, вот еще.

При классической настройке nginx на использование SSL сертификатов, он может падать с ошибкой:

no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client:xx.xx.xx.xx, server:0.0.0.0.443

Имейте в виду, при использовании HTTPS, заголовки закодированы, и обмен ключами и слой TLS должны быть сделаны до того, как они смогут быть раскодированы. Другими словами, нет способа для nginx выбрать правильный SSL-блок server до того, как он пошлет SSL-сертификат. Об этом эти ссылки:

Sidebar is under construction

Clone this wiki locally