Настройка Nginx + SSL от Let’s Encrypt на Debian
15-Мар-19 10:13
Крупные поисковые системы рекомендуют использовать защищённый https протокол. По некоторой информации наличие SSL положительно влияет на ранжирование.
- Мы будем использовать:
- Операционная система Debian
- Веб-сервер Nginx
- Бесплатный сертификат Let’s Encrypt, выдаётся на 3 месяца, поэтому нужно не забывать обновлять.
Приступим
- Подключаемся через SSH и скачиваем репозиторий Let’s Encrypt
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
Подключать сертификаты будем с помощью Webroot. Для этого открываем файл настроек виртуального хоста (например, /etc/nginx/conf.d/domain.conf или /etc/nginx/sites-available/domain.conf) и в блок server добавляем следующие строки:
-
Далее создаем сертификат с помощью клиента Let’s Encrypt:
Переходим в папку
Запускаем команду:cd /opt/letsencrypt
./letsencrypt-auto certonly -a webroot --webroot-path=/var/www/domain --email webmaster@example.com -d domain.com -d www.domain.com
- webroot-path - заменить на ваш путь к каталогу где находится сайт;
- email - ваш действующий почтовый ящик;
- d - ваш домен;
Генерируем ключ Diffie–Hellman:IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/domain .com/fullchain.pem. Your cert will expire on 2016-07-19. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - If you like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
mkdir /etc/nginx/ssl && openssl dhparam -out /etc/nginx/ssl/domain.pem 2048
Вместо domain.pem рекомендую указывать название вашего домена (например: web-tool.pem), чтоб в дальнейшем не возникало путаницы.
Данная операция может занять несколько минут.
DH ключи будут помещены в каталог /etc/nginx/ssl/. -
Возвращаемся в редактированию виртуального хоста Nginx (например, /etc/nginx/conf.d/domain.conf или /etc/nginx/sites-available/domain.conf) блок server приводим примерно к следующие строки:
server { listen 80; listen 443 ssl; server_name domain.com www.domain.com; # ваш домен root /var/www/example; # путь до вашего каталога if ( $scheme = "http" ) { return 301 https://$host$request_uri; } ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /etc/nginx/ssl/domain.pem; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_stapling on; ssl_stapling_verify on; add_header Strict-Transport-Security max-age=15768000; charset utf-8; # Lets Encrypt Webroot location ~ /.well-known { allow all; } location / { index index.php index.html; try_files $uri $uri/ /index.php?$query_string; } ... # ваши настройки }
- Важно!!! То что подчеркнуто заменить на свои данные.
- ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
- /etc/nginx/ssl/domain.pem;
Если все сделали правильно увидитеnginx -t
Перезагружаем nginxnginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
service nginx restart
- Проверяем здесь.
- Обновление сертификата происходит следующей командой (сейчас не требуется, мы получили новый сертификат)
/opt/letsencrypt/letsencrypt-auto renew
- Для автоматического обновления сертификата, создаем крон задачу.
Запускаем редактирование crontab
Добавляемcrontab -e
@monthly /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log @monthly service nginx restart
location ~ /.well-known {
allow all;
}
Сохраняем и проверяем конфиг
nginx -t
Если сделали всё правильно увидите следующее
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезагружаем конфиг
service nginx reload