×
Фото Как добавить HTTPS в nginx на Ubuntu Server (16.04 и выше)

Как добавить HTTPS в nginx на Ubuntu Server (16.04 и выше)

Наличие HTTPS на веб-сайте долгое время считалось роскошью. Тому много причин: особо за безопасность владельцы блогов и «визиток» не парились, а сам сертификат стоил денег (что-то в районе $100 в год).

Наличие HTTPS на веб-сайте долгое время считалось роскошью. Тому много причин: особо за безопасность владельцы блогов и «визиток» не парились, а сам сертификат стоил денег (что-то в районе $100 в год).

Но всё больше в последнее время давление на владельцев веб-ресурсов:

  • Гугл обещал поднять в выдаче сайты с HTTPS;
  • Браузеры ругаются на страницы полями пароля без HTTPS;
  • В конце концов сертификаты стали бесплатными.

Зачем нужен сертификат сайту

Подробнее остановимся на последнем. Всё ещё можно купить сертификат, в котором будет указано, что домен подписан сертификатом, который принадлежит компании «Roga & Kopyta Int.». Но надо ли это?

Сервис Let’s Encrypt предлагает бесплатные сертификаты типа «Этот сетрификат выдан этому домену». То есть по сути гарантирует лишь то, что никакой шутник не подменил сайт, а значит данные пересылаются безопасно. Большинству сайтов такой защиты — за глаза!

Настраиваем Let’s Encrypt на nginx в Ubuntu

Данный способ несколько раз проверен на PHP-сайтах (в том числе wordpress) и Django-сайтах (через uwsgi).

Для начала установим необходимые пакеты для добавления ppa-репозиториев:

apt update
apt install -y \
    python-software-properties software-properties-common

Добавим программу certbot, которая будет обновлять нам сертификаты. Замечу, что Let’s Encrypt выдаёт сертификаты на 2 месяца, поэтому его надо обновлять автоматически — этим и займётся certbot.

add-apt-repository ppa:certbot/certbot
apt update

Ну и поставим сам certbot — репозиторий его ведь добавили!

apt install -y \
    certbot

Дальше нам понадобиться добавить путь, по которому сервис Let’s Encrypt будет проверять — мы ли это.

server {
    ...

    # Let's Encrypt
    location ^~ /.well-known/acme-challenge/ {
        root /path/to/static/;
        add_header Cache-Control public;
        allow all;
    }
    ...
}

Многие руководства советуют добавлять location /.well-know, но certbot и letsencrypt используют именно /.well-know/acme-challenge. В связи с этим у меня были определённые трудности, когда я это настраивал для Django-сервиса.

Перезагрузим конфиги nginx:

systemctl reload nginx

И теперь мы можем уже запустить генерацию сертификатов:

certbot certonly -a webroot --webroot-path=/path/to/static/ -d имя-домена.ru -d www.имя-домена.ru

В этот момент certbot положит специальные файлы в /path/to/static, которые будут доступны по урлу http://имя-домена.ru/.well-know/acme-challenge. Сервер let’s encrypt сходит по этому url и проверит — мы ли это, никто не подменил наш сайт. После того, как проверка завершится, certbot положит сертификаты, подписанные letsencrypt в директорию /etc/letsrncrypt/live/имя-домена.ru (их мы и будем использовать).

После чего мы можем включить https:

server {
    listen 443 ssl;

    server_name имя-домена.ru
                www.имя-домена.ru;

    # SSL cert
    ssl_certificate /etc/letsencrypt/live/имя-домена.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/имя-домена.ru/privkey.pem;

    # Let's Encrypt
    location ^~ /.well-known/acme-challenge/ {
        root /path/to/static/;
        add_header Cache-Control public;
        allow all;
    }
}

И снова перечитаем конфигурацию nginx:

systemctl reload nginx

Теперь проверяем — работает ли https (заходим на сайт по https).

Ну и чтобы всегда использовать https — настроим перенаправление с http на https:

server {
    listen 80;
    server_name имя-домена.ru
                www.имя-домена.ru;
    return 301 https://имя-домена.ru$request_uri;
    access_log off;
}

В очередной раз перечитаем конфигурацию nginx:

systemctl reload nginx

Теперь должно всё работать.

Забодьтесь о безопасности своих пользователей — теперь это ещё и «бесплатно».

Будь первым – оставь комментарий!

Фото Как в MacOS создать текстовый документ
Предыдущая запись:
Как в MacOS создать текстовый документ
Фото Как работать с Android в MacOS (поддержка MTP)
Следующая запись:
Как работать с Android в MacOS (поддержка MTP)