省エネ:証明書を取得したら、nginx の設定を直接変更します。
背景#
私は Nexus を使用して、プライベートな Docker イメージリポジトリを自分のサーバーに構築しました。K8s のデフォルト動作をサポートするために、それを https にアップグレードする必要がありました。もちろん、/etc/docker/daemon.json 内の insecure-registries フィールドを設定することで、http リクエストを使用してイメージをプルすることもできますが、残念ながら、k8s のバージョン 1.23.6 ではこの設定が機能しませんでした。2 日間近くの時間を無駄にした後、お金で問題を解決できるなら、必ず解決するという原則に基づいて、8 ドルを使って問題を解決しました(主にドメインを購入したためです)。サーバーを https にアップグレードすること自体は複雑ではありませんが、人生で初めての経験として、記録しておく意義があると感じました。
SSL 証明書の準備#
私のサーバーは Alibaba Cloud で購入したものなので、ドメインと証明書も Alibaba Cloud を通じて直接取得しました。無料証明書の申請手順については、こちらを参照してください。もちろん、会社のプロジェクトの場合は信頼できる証明書を購入する必要があります(1 年で 2000 ドル以上は高すぎる!)。ただし、SSL 証明書を取得する前に、自分のサーバーにドメインを準備する必要があります。申請した証明書はドメインと関連付ける必要があるためです。IP と関連付けられた SSL 証明書も存在しますが、これはあまり一般的ではありません(少なくとも Alibaba Cloud ではサポートされていません)。ドメインを申請した後、面倒なのはドメインを DNS 解決に関連付けることです(解決サービスも段階的に販売されています... ウェブサイトの構築は本当に高価です!ただし、無料のものもありますが...)
サーバーに証明書をアップロードする#
証明書を取得した後、証明書をターゲットサーバーにアップロードする必要があります。これには scp コマンドを使用できます。
scp ファイル名 user@ターゲットIP:ターゲットファイルパス
リモートサーバーに接続すると、パスワードを入力して検証する必要があります。その後、ファイルはターゲットサーバーにアップロードされます。
nginx の設定#
/etc/nginx/nginx.conf 内の server 項目を変更します。
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
root /usr/share/nginx/html;
ssl_certificate "キーファイルのパスを変更";
ssl_certificate_key "キーキーのパスを変更";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
上記の設定では、サーバーを http2 で起動するようにもしています。ちょっとした最適化です。
設定を変更した後、nginx を再起動して変更を有効にします。その後、curl -I ホスト名を使用してアクセスを確認するか、ブラウザを使用してテストすることもできます。ただし、証明書に問題がある場合、ブラウザで 502 エラーが表示され、具体的な問題の特定に必要な情報が欠落します。
内容は少し水っぽいですが、水っぽい記事は本当に楽しいですね!特に、30 分もかからないようなものを書くと、とても幸せです。