Nginx と Certbot のインストール
sudo apt install nginx certbot
バーチャルホストの設定
/etc/nginx/sites-available
にファイルを作成します。ファイル名は分かりやすいようホスト名にすれば良いかと思います。
sudo vi /etc/nginx/sites-available/sakia_nis1_harvestasya_com
証明書を発行するための 80 ポート待ち受けを作成します。
server {
listen 80;
server_name sakia.nis1.harvestasya.com;
root /var/www/html;
index index.html;
location ^~ /.well-known/acme-challenge/ {
root /var/www/tnoce/;
}
location = /.well-known/acme-challenge/ {
return 404;
}
}
何でもいいので、/var/www/html/index.html
を作成します。
sudo vi /var/www/html/index.html
バーチャルホストを有効化します。
sudo ln -s /etc/nginx/sites-available/sakia_nis1_harvestasya_com /etc/nginx/sites-enabled
nginx の設定ファイルを再読み込みします。
sudo systemctl reload nginx
/var/www/html/index.html
が表示されるか確認します。
curl -s http://sakia.nis1.harvestasya.com
ポートを開放しておきます。
sudo ufw allow 80
証明書の取得
ディレクトリの作成
sudo mkdir /var/www/tnoce
初回はアドレスを登録していないので--email
オプションを付けてアドレスを設定してください。また、3 回ほど失敗すると数日取得出来なくなるので--dry-run
を付けて必ず取得出来ることを確認してください。
sudo certbot certonly --webroot -w /var/www/tnoce -d sakia.nis1.harvestasya.com --email xxxxxxxxxxxxxxx@gmail.com --dry-run
The dry run was successful.
が表示されれば問題ありません。--dry-run
を外して実際に証明書を取得します。
sudo certbot certonly --webroot -w /var/www/tnoce -d sakia.nis1.harvestasya.com --email xxxxxxxxxxxxxxx@gmail.com
証明書は/etc/letsencrypt/live
に作成されます。
バーチャルホストに SSL の設定
sudo vi /etc/nginx/sites-available/sakia_nis1_harvestasya_com
server {
listen 80;
server_name sakia.nis1.harvestasya.com;
location / {
return 404;
}
location ^~ /.well-known/acme-challenge/ {
root /var/www/tnoce/;
}
location = /.well-known/acme-challenge/ {
return 404;
}
}
server {
listen 7891 ssl http2;
resolver 127.0.0.1 ipv6=off;
server_name sakia.nis1.harvestasya.com;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://localhost:7890;
}
ssl_certificate /etc/letsencrypt/live/sakia.nis1.harvestasya.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sakia.nis1.harvestasya.com/privkey.pem;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 7779 ssl http2;
resolver 127.0.0.1 ipv6=off;
server_name sakia.nis1.harvestasya.com;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
location / {
proxy_pass http://localhost:7778;
}
ssl_certificate /etc/letsencrypt/live/sakia.nis1.harvestasya.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sakia.nis1.harvestasya.com/privkey.pem;
}
nginx の設定ファイルを再読み込みします。
sudo systemctl reload nginx
ポート開放
sudo ufw allow 7891
sudo ufw allow 7779
Certbot の renew のタイミングで Nginx を再読み込み
sudo vi /lib/systemd/system/certbot.service
ExecStart
の末尾に--post-hook "systemctl reload nginx"
を追加します。
certbot.service
[Unit]
Description=Certbot
Documentation=file:///usr/share/doc/python-certbot-doc/html/index.html
Documentation=https://certbot.eff.org/docs
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot -q renew --post-hook "systemctl reload nginx"
PrivateTmp=true
関連記事