
ちょっとしたサーバの挙動確認や勉強のために、Nginx環境を作成したい場合があると思います。Dockerなどを使ってコンテナにまとめるのがベストプラクティスではありますが、「ただ学習用に少し触りたいだけ」の時は、環境構築のコストが高く感じてしまいますよね。
そこで今回は、Nginxをサクッと動かせて、かつ設定ファイルやログなどのデータを一つのサブディレクトリにまとめることで、グローバル環境を汚さずに一瞬で構築・削除ができる方法をメモしておきます。(参考になれば幸いです)
動作環境 今回の構築コマンドは Ubuntu 24.04 で動作確認しています。バニラなUbuntu環境(セットアップ直後)を前提にしていますが、ほとんどのLinux環境でそのまま動くはずです。
1. Nginxをインストールする
まずはNginx本体をインストールします。
sudo apt install nginx【重要】Ubuntu環境の方へ Ubuntuでは上記コマンドを実行すると、システム全体のNginxサービスが自動的に起動してしまいます。「環境を汚さない」ために、以下のコマンドでシステムのNginxを停止・自動起動オフにしておきましょう。
sudo systemctl disable --now nginx2. 作業用サブディレクトリの準備(適当なディレクトリに移動)
作業したいディレクトリに移動します。特にこだわりがなければ、以下のように workspace などのディレクトリを作って移動しておくと分かりやすいです。
# ~/workspace を作成して移動。この中に my-local-nginx が作られます。
mkdir -p ~/workspace
cd ~/workspace3. ローカルNginx環境の構築コマンド(コピペ用)
以下のコマンドをそのままターミナルにコピペして実行すると、現在のディレクトリ内に必要なファイルが生成され、Nginxサーバが立ち上がります。
※
my-local-nginxというフォルダ名や、設定内のポート番号8080は自由に変更可能です。複数立ち上げたい時は、ディレクトリを分けてポートを8081、8082とずらすだけで別環境になります。
# 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/を開くと以下のような表示ができれば成功です。

起動に成功したときのブラウザ表示
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.confsudo 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 -tnginxの操作に慣れるなら上の基本操作で操作する方が指が覚えると思いますがどのみち、パラメータ周りは毎回同じなので、各々自分の好みに省略してみるといいかもしれません。以下は一例として関数化したものです。
# サーバの基本操作関数 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関連記事
今回の記事で扱ったターミナルコマンドとかの個別の紹介記事です。
【初心者向け】grepコマンド「ファイル内から文字列検索」- 特定の行だけ抜き出す -【Linuxコマンド入門 #17】
Linuxのgrepコマンド。ログや設定ファイルから特定の「文字列」を検索する方法を解説。-i(大文字小文字無視)、-n(行番号)、-r(再帰)オプションやパイプ(|)との連携も紹介。
【 | 】コマンドを繋げる「パイプ」~ | の使い方~【続・Linuxコマンド入門 #2】
コマンドを繋げる「パイプ (|)」入門!あるコマンドの結果を、ls | grep のように次のコマンドへ直接渡す仕組みを、初心者向けにわかりやすく解説します。
【ps】PIDを確認する方法。killコマンドなどでプロセス特定に必要です。【Linuxコマンド入門 Part3-4】
psコマンドの基本、基本動作.と使い方についておすすめのオプションとよく使うものを優先的に紹介します。プロセス管理の基本をマスターしましょう。
ここまで読んでいただきありがとうございます。
では、次の記事で。 lumenHero