Сейчас все стало намного проще. Устанавливаем certbot:
# snap install --classic certbot # ln -s /snap/bin/certbot /usr/bin/certbot
Затем настраиваем в nginx требуемый виртуальный сервер для http как обычно и запускаем certbot:
# certbot --nginx
Отвечаем на вопросы и на этом все!
Ниже более не актуально
Инфы много, поэтому коротко и тезисно, как получить и обновлять сертификаты Let’s Encrypt и использовать совместно с nginx на Ubuntu.
Ставим certbot:
$ sudo apt-get install letsencrypt
Настраиваем домен в nginx.
Создаем файл /etc/nginx/sites-available/test.i-rrv.ssl:
server { listen 192.168.0.1:80; server_name test.i-rrv.ru; location /.well-known { root /home/www.test/test; } }
Папка /home/www.test/test должна уже быть.
Делаем линк:
ln -s /etc/nginx/sites-available/test.i-rrv.ssl /etc/nginx/sites-enabled/test.i-rrv.ssl
Перезапускаем nginx
$ sudo service nginx restart
Создаем сертификаты:
$ sudo letsencrypt certonly --webroot -w /home/www.test/test -d test.i-rrv.ru
за раз можно сделать для нескольких доменов, но нам не надо.
Отвечаем за вопросы.
Все, сертификаты созданы, теперь меняем настройку домена, включаем поддержку ssl (тут пример, у вас будет свой):
server { listen 192.168.0.1:80; server_name test.i-rrv.ru; charset utf-8; location /.well-known { root /home/www.test/test; } location / { return 301 https://$server_name$request_uri; # enforce https } } server { listen 10.157.35.2:443; server_name test.i-rrv.ru; ssl on; ssl_certificate /etc/letsencrypt/live/test.i-rrv.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/test.i-rrv.ru/privkey.pem; error_log /home/www.test/nginx_ssl_test.i-rrv_error.log; location / { root /home/www.test/test/; charset utf-8; } location ~* \.php$ { root /home/www.test/test/; fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param HTTPS on; fastcgi_param HTTP_SCHEME https; client_body_temp_path /home/www.test/sy_client_temp/; } location ~* \.(jpg|jpeg|gif|png|swf|ico|js|css)$ { root /home/www.test/test/; access_log off; expires 30d; } location ~ /\.ht { deny all; } }Перезапускаем nginx$ sudo service nginx restartПроверяем работу.
Осталось только добавить добавить в cron задачу автоматического пересоздания сертификатов, т.к. они действуют только 90 дней.
Добавляем строку в файл /etc/crontab:
27 0,12 * * * root /usr/bin/letsencrypt renew --agree-tos > /dev/null 2>>/var/log/letsencrypt/cron-letsencrypt.logВремя выбираем по вкусу, но разработчики certbot рекомендуют два раза в сутки, но учтите, что он не надолго останавливает работу сервера, так что если вам это критично, обновляйте в ручную.
Перезапускаем cron:$ sudo killall -1 cronВсе 😉