Настройка https в nginx

Для работы протокола HTTPS nginx должен быть собран с модулем –with-http_ssl_module, по умолчанию этот модуль не собирается. Для сборки и работы этого модуля нужна библиотека OpenSSL

Оптимизация HTTPS-сервера. Включаем общий кеш ssl размером 10Mb (1Mb хранит 4000 сессий), устанавливаем таймаут ssl сессии, указываем клиенту, что приоритетными будут шыфры, поддерживаемые сервером. Эти параметры лучше указывать в секции http {}, что бы в памяти хранилась одна копия настроек для каждого виртуального сервера.

http {
    ssl_session_timeout        10m;
    ssl_session_cache          shared:SSL:10m;
    ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers  on;
    ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA-RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
}

Пример секции server {} с настройками для https. Для параметра listen должна быть задана опция ssl. Файл сертификата может быть в формате crt или pem. В этот файл нужно поместить цепочку сертификатов в такой последовательности: сертификат домена –> промежуточный сертификат –> корневой сертификат.

server {
    listen		192.168.1.1:443 ssl;
    server_name		site.net www.site.net;
    ssl_certificate     /usr/local/etc/nginx/ssl/site.net.crt;
    ssl_certificate_key /usr/local/etc/nginx/ssl/site.net.key;
}

Что бы на одном IP по протоколу https работало несколько виртуальных серверов, требуется что бы nginx и openssl были собраны с поддержкой SNI. OpenSSL поддерживает SNI начиная с версии 0.9.8f, если она была собрана с опцией конфигурации “–enable-tlsext”. Начиная с OpenSSL 0.9.8j эта опция включена по умолчанию.

Для принудительного перенаправления запросов с http –> https можно использовать конструкцию для секции server {}, где запросы приходят на 80 порт!

if ($scheme = http) {return 301 https://$server_name$request_uri;}
if ($host ~* www.) {return 301 https://$server_name$request_uri;}

Прелесть конструкции в том, что редирект делается по 301 заголовку и при этом как для запроса с www так и без www, то есть это решает проблему с дублями страниц при индексации.