Как установить сертификат на Nginx?

Установка SSL-сертификата и переход к протоколу HTTPS – отличный способ повысить безопасность соединений между браузером и сервером. SSL-соединение является крайне рекомендованным для всех сайтов, где требуется пользовательская регистрация. Вопреки тому, что говорят многие устаревшие инструкции и руководства, сертификат не добавляет никакой серьезной нагрузки на сервер, и его можно легко и недорого выпустить.

Как установить SSL-сертификат на Nginx

Для установки SSL на Nginx нужно будет выполнить следующие шаги:

  1. Вы должны получить архив с сертификатом на свой почтовый адрес, который был указан при заказе SSL-сертификата. Архив обычно хранит в себе корневой, промежуточный сертификат, а также сертификат для домена. Если вы уже имеете файл bundle.crt, вы можете сразу переходить к шагу 4. В противном случае вам нужно будет объединить в один файл три файла сертификатов. Этот процесс подробно описан в пунктах 2 и 3.
  2. У вас должно быть три файла: comodo_root.crt (корневой сертификат), comodo_intermediate.crt (промежуточный сертификат) и vash_domen.crt. Скопируйте их вместе с файлом .key в произвольный каталог на своем сервере, в котором вы хотите их хранить.
  3. Вам нужно будет объединить файл с корневым сертификатом (comodo_root.crt), файл с промежуточным сертификатом (comodo_intermediate.crt) и файл сертификата vash_domen.crt в один crt-файл. Делается это с помощью следующей команды:

cat comodo_root.crt comodo_intermediate.crt vash_domen.crt > bundle.crt

В некоторых случаях Comodo присылают архив, в котором файлы промежуточного сертификата и корневого сертификата уже объединены в один файл. Если так, то вам нужно будет объединить его с файлом сертификата при помощи следующей команды:

cat comodo-bundle.crt vash_domen.crt > bundle.crt

  1. Переходим к настройке Nginx.

    Открываем файл виртуального хоста Nginx для сайта, который вы хотите защитить. Если вы хотите, чтобы ваш сайт был доступен и через незащищенное, и через защищенное соединение, вам нужно будет добавить модуль сервера для каждого типа подключения. Сделайте копию существующего модуля для незащищенного соединения и вставьте его под основным кодом. После чего добавьте к нему следующие строки (выделены жирным):

server {

listen 443;

ssl on;

ssl_certificate /etc/ssl/bundle.crt;

ssl_certificate_key /etc/ssl/vash_domen.key;

server_name vashdomen.com;

access_log /var/log/nginx/nginx.vhost.access.log;

error_log /var/log/nginx/nginx.vhost.error.log;

location / {

root /home/www/public_html/vash_domen/public/;

index  index.html;

}

}

Убедитесь в том, что в ssl_certificate указан crt-файл, созданный нами ранее.

Если вы использовали генератор, приведенный выше по ссылке, то в таком случае ваш конфигурационный файл может иметь следующий вид (здесь мы подразумеваем, что вы генерировали dhparam.pem для прямой секретности. Если нет, то делается это командой openssl dhparam -out /etc/pki/nginx/dhparam.pem 4096):

server {

    listen 80;

    server_name name.ru www.name.ru;

    return 301 https://name.ru$request_uri;

}

# Добавляем 301 редирект

server {

     listen 443 ssl http2;

     server_name www.name.ru;

     # здесь обязательно указываем сертификаты

     ssl_certificate /etc/nginx/ssl/name.ru/bundle.crt;

     ssl_certificate_key /etc/nginx/ssl/name.ru/name.key;

     return 301 https://name.ru$request_uri;

}

server {

    # добавляем протокол http2

    listen 443 ssl http2;

    server_name name.ru;

    access_log off;

    #access_log /var/log/nginx/name.ru.access.log;

    error_log /var/log/nginx/name.ru.error.log;

  ssl on;

    # Включаем OCSP-stapling. Что это такое и зачем нужно, вы можете найти у нас в FAQ.

    ssl_stapling on;

    ssl_stapling_verify on;

    # наши сертификаты

    ssl_certificate /etc/nginx/ssl/name.ru/bundle.crt;

    ssl_certificate_key /etc/nginx/ssl/name.ru/name_private.key;

    ssl_dhparam /etc/nginx/ssl/name.ru/dhparam.pem;

    # настраиваем сессию

    ssl_session_tickets off;

    ssl_session_timeout 1d;

    ssl_session_cache shared:SSL:50m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

    ssl_prefer_server_ciphers on;

    add_header Strict-Transport-Security max-age=31536000;

    # проксирование данных

    location / {

        # параметры проксирования

        proxy_send_timeout 600;

        proxy_read_timeout 600;

        proxy_buffer_size   128k;

        proxy_buffers   4 256k;

        proxy_busy_buffers_size   256k;

        proxy_set_header Host      $host;

        proxy_set_header X-Real-IP $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_set_header HTTPS YES;

        # IP-адрес целевой площадки для проксирования

        proxy_pass http://192.168.1.108;

    }

Также вам нужно будет добавить в конфиг следующее (здесь все зависит от используемой CMS):
location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/www.sock; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; fastcgi_param REMOTE_ADDR $http_x_real_ip; fastcgi_param HTTPS on; fastcgi_param HTTP_HTTPS on; fastcgi_param REQUEST_SCHEME https; fastcgi_param SERVER_PORT 443; }
  1. Сделайте рестарт Nginx. Просто выполните следующую команду:

service nginx restart

  • 2 Пользователи нашли это полезным
Помог ли вам данный ответ?

Related Articles

Вопросы и ответы про SSL

Что такое SSL-сертификат? SSL (Secure Sockets Layer — уровень защищённых сокетов) — протокол,...

Могу ли я изменить IP адрес моего домена, если на нем уже установлен SSL – сертификат?

Сертификат не привязан к какому-либо определенному IP-адресу. Он выписывается на полностью...

Установка SSL в панели Plesk

1. Авторизуйтесь в панели управления Plesk. 2. В меню слева нажмите на Домены. 3. Выберите...

Как установить сертификат на Apache?

Защищенное соединение между веб-браузером и сервером – гарантия того, что клиенты могут совершать...

Как установить сертификат на IIS?

1. Перейдите в Пуск (Start) — Панель управления (Control Panel) — Администрирование...