自由拡張

本番の隣に、確認用の場所を作る

ここまでで、公開するサーバーは一通り動くようになりました。最後に足すのは、公開する前に確かめる場所です。

本番と同じ作りの場所をもう1つ用意して、そこで先に見てから本番へ出す。これをステージングと呼びます。作りが同じでないと確認の意味が無いので、同じ nginx の上に、別のポートで、別の置き場として作ります。

ただし、確認用の場所が誰にでも見えていては困ります。出す前の内容が外から読めてしまうからです。鍵をかけます

いちばん簡単な鍵 — Basic 認証

nginx が自分で持っている仕組みで、名前とパスワードを聞く方式です。ログイン画面を作る必要はなく、設定2行で有効になります。

auth_basic "staging"; auth_basic_user_file /etc/nginx/.htpasswd;

auth_basic に書いた文字は、パスワードを聞かれるときに表示される名前です。auth_basic_user_file は、誰が入れるかを書いたファイルの場所です。

設定を書いていない場所は今までどおり誰でも見られます。かけたい場所にだけかけるのがこの仕組みの良いところです。

パスワードは平文で置かない

利用者ファイルの中身は、こういう1行です。

akari:$apr1$xxxxxxxx$yyyyyyyyyyyyyyyyyyyyy.

名前のあとに続くのは、パスワードそのものではなくハッシュです。5章の鍵と同じ考え方で、元に戻せない形に変換してから置きます。ファイルが漏れてもパスワードそのものは分かりません。

ハッシュは openssl で作れます。

openssl passwd -apr1 himitsu2026

-apr1 は nginx が読める形式を指定するものです。出てきた文字列を、名前とコロンでつないでファイルに書きます。

echo "akari:$(openssl passwd -apr1 himitsu2026)" > /etc/nginx/.htpasswd

置いたファイル自体も守る

ハッシュとはいえ、誰でも読める場所に置く必要はありません。読めるのは nginx だけで十分です。

chown root:www-data /etc/nginx/.htpasswd chmod 640 /etc/nginx/.htpasswd

640 は、持ち主は読み書き、グループは読むだけ、その他は何もできない、という指定です。4章の秘密鍵で 600 にしたのと同じ考え方で、読める人を必要な範囲まで狭めるわけです。

別のポートで待たせる

本番と同じ 443 番では区別が付かないので、ステージングは別の番号にします。ここでは 8443 番を使います。

listen 8443 ssl;

番号を変えたら ufw で通すのを忘れないでください。3章でやったとおり、待ち受けているだけでは外から届きません。設定を書いた、待っている、通れる。この3つが揃って初めて繋がります

手を動かす

ステージング環境を 8443 番に作り、Basic 認証で鍵をかけます。本番のほうは今までどおり鍵なしで見られる状態を保ってください。

ヒント

  • 1. /var/www/mysite-staging/index.html を作る
  • 2. openssl passwd -apr1 himitsu2026 でハッシュを作り、akari: とつないで /etc/nginx/.htpasswd に書く
  • 3. chown root:www-data と chmod 640 でファイルを守る
  • 4. staging.conf を書く。listen 8443 ssl、auth_basic、auth_basic_user_file の3つを入れる
  • 5. sites-enabled へリンクを張り、nginx -t のあと reload する
  • 6. ufw allow 8443/tcp で通す
  • 7. 名前なしで 401、akari で 200 が返ることを curl で確かめる

14 項目で採点します