5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

nem / symbolAdvent Calendar 2024

Day 3

NIS1 を Nginx で SSL 化する

Last updated at Posted at 2024-12-02

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

関連記事

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?