Junkie Work

access: 202839

FreeBSD 14.3-RELEASEにてWebサーバー(nginx)


https対応のWebサーバーを作成します。

証明書は、無料の認証局(Let's Encrypt)を利用します。

nginxとcertbotのインストール

nginxとcertbotをpkgでインストールします。

# pkg install nginx py311-certbot-nginx

証明書の取得

certbotを利用して、証明書を作成します。
junkie.workとwww.junkie.workの証明書を作る場合は、以下のようにコマンドを打ちます。
(この作業が終わるまでは、80/tcpを使うプログラムは停止しておいてください)

# certbot certonly --standalone -d junkie.work -d www.junkie.work 

初回起動時は、メールアドレスの登録を求められます。
メールアドレスを登録しない場合は、空のままEnterキーを押します。

次に、利用規約に同意するかどうかを聞かれます。
同意する場合は、"Y"を入力してEnterキーを押します。

その後、証明書の作成が始まり、少し待つと証明書が出来上がります。

証明書は、/usr/local/etc/letsencrypt/live/junkie.work/ 配下に作成されます。

nginxの設定ファイルの作成

nginxの設定ファイルを作成します。

複数のサイトが管理できるように設定ファイルを分割します。

以下のコマンドで、nginxの設定ファイルを置くディレクトリを作成します。

# mkdir -p /usr/local/etc/nginx/conf.d
# mkdir -p /usr/local/etc/nginx/sites.d

次に、/usr/local/etc/nginx/nginx.conf を編集して、以下のように設定します。

user www;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
    worker_connections 1024;
}
http {
    include /usr/local/etc/nginx/conf.d/*.conf;
    include /usr/local/etc/nginx/sites.d/*.conf;
}

/usr/local/etc/nginx/conf.d/default.confを以下のように作成します。

include mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

/usr/local/etc/nginx/sites.d/junkie.work.confを以下のように作成します。

ssl_certificateやssl_certificate_keyのパスは、certbotで作成した証明書のものにします。

server {
    listen 80;
    server_name junkie.work www.junkie.work;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name junkie.work www.junkie.work;

    ssl_certificate /usr/local/etc/letsencrypt/live/junkie.work/fullchain.pem;
    ssl_certificate_key /usr/local/etc/letsencrypt/live/junkie.work/privkey.pem;
    include /usr/local/etc/letsencrypt/options-ssl-nginx.conf;

    root /usr/local/www/junkie.work/data;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

nginxの起動

nginxを有効にして、起動します。

# service nginx enable
# service nginx start

rootに指定した/usr/local/www/junkie.work/data/にファイルを作成します。

# echo "Hello, World!" > /usr/local/www/junkie.work/data/index.html

ブラウザで、ホストを指定してアクセスし、Hello, World!が表示されれば成功です。

証明書が自動更新されるように、/etc/periodic.confに以下の設定を追加します。

weekly_certbot_enable="YES"