Сейчас все стало намного проще. Устанавливаем 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
Все 😉