nginxのテスト環境を簡単に作って消す方法(備忘録)

Nginxの環境をdokerなどを介さず、サブディレクトリで構築するほうほうを紹介した記事のサムネイル

ちょっとしたサーバの挙動確認や勉強のために、Nginx環境を作成したい場合があると思います。Dockerなどを使ってコンテナにまとめるのがベストプラクティスではありますが、「ただ学習用に少し触りたいだけ」の時は、環境構築のコストが高く感じてしまいますよね。

そこで今回は、Nginxをサクッと動かせて、かつ設定ファイルやログなどのデータを一つのサブディレクトリにまとめることで、グローバル環境を汚さずに一瞬で構築・削除ができる方法をメモしておきます。(参考になれば幸いです)

動作環境 今回の構築コマンドは Ubuntu 24.04 で動作確認しています。バニラなUbuntu環境(セットアップ直後)を前提にしていますが、ほとんどのLinux環境でそのまま動くはずです。

1. Nginxをインストールする

まずはNginx本体をインストールします。

sudo apt install nginx

【重要】Ubuntu環境の方へ Ubuntuでは上記コマンドを実行すると、システム全体のNginxサービスが自動的に起動してしまいます。「環境を汚さない」ために、以下のコマンドでシステムのNginxを停止・自動起動オフにしておきましょう。

sudo systemctl disable --now nginx

2. 作業用サブディレクトリの準備(適当なディレクトリに移動)

作業したいディレクトリに移動します。特にこだわりがなければ、以下のように workspace などのディレクトリを作って移動しておくと分かりやすいです。

# ~/workspace を作成して移動。この中に my-local-nginx が作られます。
mkdir -p ~/workspace
cd ~/workspace

3. ローカルNginx環境の構築コマンド(コピペ用)

以下のコマンドをそのままターミナルにコピペして実行すると、現在のディレクトリ内に必要なファイルが生成され、Nginxサーバが立ち上がります。

my-local-nginx というフォルダ名や、設定内のポート番号 8080 は自由に変更可能です。複数立ち上げたい時は、ディレクトリを分けてポートを 80818082 とずらすだけで別環境になります。

# 1. プロジェクト用のディレクトリと、Nginxが必要とするサブディレクトリを一括作成
mkdir -p my-local-nginx/{logs,conf,html,temp/{client_body,proxy,fastcgi,uwsgi,scgi}}
cd my-local-nginx

# 2. テスト用HTMLファイルの作成
cat << 'EOF' > html/index.html
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>ローカルNginx</title></head>
<body>
    <h1>成功!ローカルNginxが起動しています</h1>
    <p>グローバル環境を汚染せず、このディレクトリだけで完結しています。</p>
</body>
</html>
EOF

# 3. Nginxの設定ファイルを作成(ヒアドキュメントを使用)
cat << 'EOF' > conf/nginx.conf
# root権限不要で動かすための設定
worker_processes 1;
pid ./nginx.pid;
error_log ./logs/error.log;

events {
    worker_connections 1024;
}

http {
    default_type  text/html;
    access_log ./logs/access.log;

    # 一時ファイルのパスをローカルに強制(権限エラーを回避)
    client_body_temp_path ./temp/client_body;
    proxy_temp_path       ./temp/proxy;
    fastcgi_temp_path     ./temp/fastcgi;
    uwsgi_temp_path       ./temp/uwsgi;
    scgi_temp_path        ./temp/scgi;

    server {
        # 80番ポートはroot権限が必要なため、8080番を使用
        listen 8080;
        server_name localhost;

        location / {
            root ./html;
            index index.html;
        }
    }
}
EOF

# 4. Nginxをカレントディレクトリ基準で起動
nginx -p $PWD/ -c conf/nginx.conf

# 5. 動作確認(ローカルホストの8080ポートへアクセス)
echo -e "\n=== サーバーにアクセスします ==="
sleep 1
curl http://localhost:8080/

作成完了して、起動できたら、ブラウザなどでhttp://localhost:8080/を開くと以下のような表示ができれば成功です。

nginxのテスト環境を起動できた時のデフォルト表示

起動に成功したときのブラウザ表示

4. 環境のお片付け(終了コマンド)

3.のコマンドで起動したNginxはバックグラウンドで動いています。検証が終わったら、以下のコマンドで安全に停止し、ディレクトリごと削除して環境を綺麗にできます。

停止コマンド

(作業を一時中断したい時はこれだけ打ち込みます)

# Nginxを停止
nginx -p $PWD/ -c conf/nginx.conf -s quit

※成功すると [notice] 4093#4093: signal process started のようなメッセージが出ます。

次回起動したいときのコマンド

再起動するためのコマンドです。

# 作成した my-local-nginx ディレクトリに cd してから以下を実行
nginx -p $PWD/ -c conf/nginx.conf
sudo systemctl start nginxでは動かない

nginxを触ったことがある人なら、起動は”sudo systemctl start nginx”と暗記しているかもしれませんが、これの主体は、”systemctl”つまり、OSのシステム管理機能(systemdなど)に対して「システムに登録されている公式のNginxサービスを起動して」とお願いするコマンドです。 

今回はサブディレクトリに設定フォルダを全部配置して、仮想環境のような感じで作っているため、nginxにそれぞれパラメータ指定で起動する必要があります。

起動状態確認コマンド

上記のようにnginxを手動立ち上げしているので、 system系で状態確認できないので、以下のようなコマンドで確認します。

ps aux | grep nginx | grep -v grep

起動できていると以下のような表記が出るはずです。

$ ps aux | grep nginx | grep -v grep
tukumo       689  0.0  0.0  11068  1744 ?        Ss   12:40   0:00 nginx: master process nginx -p /home/tukumo/server/my-local-nginx/ -c conf/nginx.conf
tukumo       690  0.0  0.0  11520  2224 ?        S    12:40   0:00 nginx: worker process

環境削除コマンド(注意)

以下のコマンドで環境削除できます。

# 一つ上の階層に戻り、作成したディレクトリを丸ごと削除
cd ..
rm -rf my-local-nginx

echo "環境のクリーンアップが完了しました。"

最後に

この方法を使えば、ディレクトリを分けるだけでWebサーバ、リバースプロキシサーバなど複数のNginx環境をサクッと作れます。いろいろ構成を試してみると理解が深まって楽しいと思います。

今回の環境での操作まとめと関数版

基本操作まとめ(基本に忠実なほう)

# 起動
nginx -p $PWD/ -c conf/nginx.conf
# 停止
nginx -p $PWD/ -c conf/nginx.conf -s quit
# 設定テスト
nginx -p $PWD/ -c conf/nginx.conf -t

nginxの操作に慣れるなら上の基本操作で操作する方が指が覚えると思いますがどのみち、パラメータ周りは毎回同じなので、各々自分の好みに省略してみるといいかもしれません。以下は一例として関数化したものです。

# サーバの基本操作関数 do-server (疑似systemctl)
do-server() {
  case "$1" in
    start)
      nginx -p "$PWD/" -c conf/nginx.conf
      ;;
    stop|quit)
      nginx -p "$PWD/" -c conf/nginx.conf -s quit
      ;;
    reload)
      nginx -p "$PWD/" -c conf/nginx.conf -s reload
      ;;
    test)
      nginx -p "$PWD/" -c conf/nginx.conf -t
      ;;
    *)
      echo "Usage: do-server {start|stop|reload|test}"
      ;;
  esac
}
# do-serverでの起動と停止。 systemctlと同じ感じに呼び出せる。
do-server start
do-server stop