01 / 前提と公開範囲を確認する
対象はUbuntu Server 22.04へ新規にNginxを導入する構成です。物理マシン・仮想マシンの操作は共通です。管理者とSSH、ファイアウォール、OS更新を済ませ、sudoと復旧コンソールを確保してください。
この章の到達点は、別端末からHTTPで自分のページを表示することです。HTTPは暗号化されません。ログイン画面や秘密情報を公開せず、HTTPSは後の章で設定します。
以下の設定は既定サイトを切り替えます。既にWebサイト・コンテナー・リバースプロキシを運用しているサーバーは対象外です。ポート80の利用状況と既存設定を確認し、使用中ならここで中断して構成を設計してください。コマンドは特記以外、サーバーの一般管理者で実行します。
sudo ss -ltnp
sudo ufw status verbose
sudo test ! -e /etc/nginx/sites-available/server-guide
sudo test ! -e /var/www/server-guideCLIENT_IPはサーバーから見える確認用端末の送信元IP、SERVER_IPは端末から到達できるサーバーのアドレスへ置き換えます。NAT・VPN・仮想NIC・クラウド側のFWも通信経路に含まれます。
02 / Nginxとサイト用ファイルを用意する
sudo apt-get update && sudo apt-get install nginx curl
sudo systemctl enable --now nginx
systemctl is-active nginx
systemctl is-enabled nginxパッケージ取得や署名検証に失敗したら進まず、APTのエラーを修正します。サービスがactive・enabledであることを確認してください。配信ファイルは管理者が更新し、Webプロセスに書き込み権限を渡しません。
sudo test ! -e /var/www/server-guide &&
sudo install -d -o root -g root -m 755 /var/www/server-guide/public
sudo test ! -e /var/www/server-guide/public/index.html &&
printf '%s\n' '<!doctype html><html lang="ja"><meta charset="utf-8"><title>Server Guide</title><h1>Nginx is ready</h1></html>' | sudo tee /var/www/server-guide/public/index.html >/dev/null
sudo chown root:root /var/www/server-guide/public/index.html
sudo chmod 644 /var/www/server-guide/public/index.html既存ディレクトリやファイルがあって検査に失敗した場合は、そのまま続けず内容を確認します。chmod 777やWebルート全体のwww-data所有への変更は行いません。
03 / サイト設定を作り切り替える
Web公開領域の外に設定をバックアップし、保存先を控えます。以下はこの手順で作る新規サイト専用です。
BACKUP="$(sudo mktemp -d /root/server-guide-nginx.XXXXXX)" &&
sudo cp -a /etc/nginx "$BACKUP/"
printf '保存先: %s
' "$BACKUP"既存ファイルがないことを確認して、次の設定を書き込みます。server_name _はドメインを取得する設定ではありません。ここではIPv4の既定サイトとしてIPアドレスで確認します。IPv6で公開する場合は待受・FW・経路も別途設定し確認してください。
sudo test ! -e /etc/nginx/sites-available/server-guide &&
sudo tee /etc/nginx/sites-available/server-guide >/dev/null <<'EOF'
server {
listen 80 default_server;
server_name _;
root /var/www/server-guide/public;
index index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ /\. {
deny all;
}
location ~ \.php$ {
return 404;
}
}
EOF標準のdefaultシンボリックリンクだけを外し、新規サイトを有効化します。他のサイト設定やファイルを一括削除しないでください。defaultが通常ファイルの場合や別の既定サイトがある場合は、ここで中断して確認します。
sudo ln -s /etc/nginx/sites-available/server-guide /etc/nginx/sites-enabled/server-guide &&
sudo test -L /etc/nginx/sites-enabled/default &&
sudo unlink /etc/nginx/sites-enabled/default &&
sudo nginx -t && sudo systemctl reload nginx構文検査が失敗したら再読み込みせず、表示されたファイルと行を修正します。未導入のPHPファイルは404にしてソースを配信しない構成です。
04 / ローカルと別端末から表示する
curl --fail --show-error http://127.0.0.1/
sudo nginx -t
sudo ss -ltnpサーバー内でNginx is readyを含むHTMLが返り、構文検査が成功し、TCP 80番の待受があることを確認します。次にUFWが有効なら、先に確認用端末だけのHTTP受信を許可します。既存のSSH許可を削除せず、新規SSH接続も確認してください。
sudo ufw allow from CLIENT_IP to any port 80 proto tcp
sudo ufw status numbered別の端末のブラウザーでhttp://SERVER_IP/を開き、同じページが表示されることを確認します。curlを使う場合も別端末で次を実行します。
curl --fail --show-error http://SERVER_IP/つながらないときは、①サーバー内のHTTP応答、②待受とサービス、③サーバー側FW、④クラウド・ルーター・NAT/ポート転送、⑤接続先アドレスの順で切り分けます。広い公開が必要なら対象とIPv4/IPv6を決めて許可しますが、この段階で無条件に全世界へ公開する必要はありません。
05 / ログと戻し方を確認する
sudo journalctl -u nginx -b --no-pager
sudo tail -n 50 /var/log/nginx/error.log
sudo tail -n 20 /var/log/nginx/access.log403はファイルと親ディレクトリの権限、404はrootとファイル名、接続拒否は待受とサービス、タイムアウトは経路とFWを確認します。アクセスログには利用者のIP等が残るため、公開資料へそのまま貼り付けません。
この章だけを取り消す場合は、追加したsites-enabled/server-guideリンクを外し、変更前に有効だったdefaultリンクをバックアップと照合して戻します。sudo nginx -t && sudo systemctl reload nginxで反映します。追加したHTTP許可だけを削除し、SSH許可や無関係なFWルールを消さないでください。
静的ページが別端末で表示されたら、PHP-FPMの実行環境へ進みます。参考:Nginx公式の基本ガイド。
