nginx(エンジンエックス)は、Webサーバーとしてだけでなく、
リバースプロキシロードバランサHTTPキャッシュとしても定番のソフトウェアです。DockerやKubernetesなどのコンテナ運用と相性が良く、
「まずnginxで受けて、アプリ(Node/Laravel/Rails等)へ流す」構成は現場で超よく見ます。

この記事でできること

  • nginxの役割・仕組みを、Webエンジニア向けに短時間で理解
  • Apacheとの違い(思想・強み・向き不向き)を整理
  • Docker+Ubuntuで「インストール → 設定 → テスト」まで実行
  • よくある「動かない」原因の切り分け(nginx -t / curl / ポート / 設定反映)

nginxとは?ざっくり一言でいうと

nginxは、高負荷・高同時接続に強いことを意識して設計されたWebサーバー/リバースプロキシです。
静的ファイル配信が得意で、フロント(入口)に置いてアプリサーバーへ中継する構成が王道です。

nginxが現場で選ばれがちな理由(よくある用途)

  • リバースプロキシ:/api はLaravelへ、/ は静的配信、などの振り分け
  • TLS終端:HTTPSをnginxで受けて、内部はHTTPでアプリへ
  • ロードバランサ:複数アプリへラウンドロビン等で分散
  • キャッシュ:上流負荷を下げる(特に静的/半静的)
  • 静的ファイル配信:画像、JS、CSS、ダウンロード配布

Apacheとの違い:何がどう違う?(実務目線)

Apache(httpd)もnginxもWebサーバーですが、思想と得意分野が違います。
よく言われる整理として、nginxはイベント駆動で同時接続に強い方向、Apacheはモジュールが豊富で柔軟方向に強みがあります。:contentReference[oaicite:2]{index=2}

ざっくり比較(選定の勘どころ)

  • 静的ファイル:nginxが得意(低メモリで捌きやすい)
  • リバースプロキシ:nginxが定番(入口として設計が馴染む)
  • .htaccess文化:Apacheはディレクトリ単位で分散管理しやすい(運用の好み次第)
  • 動的コンテンツ:どちらでもOKだが、構成で変わる(Apache直/nginx→php-fpm など)
  • レガシー共有ホスティング:Apacheの前提が残る現場も多い

結論:迷ったらこの判断が速い

  • 入口で捌く」「プロキシしたい」「コンテナ運用したい」→ nginx
  • .htaccess運用が前提」「Apache固有のモジュール運用が前提」→ Apache
  • nginx+Apache」も普通(nginxをフロント、Apacheをバックに置く)

nginxのメリット

  • 高同時接続に強い設計(イベント駆動・省リソース志向)
  • リバースプロキシが強い(設定が素直でパターン化しやすい)
  • コンテナで使いやすい(公式Dockerイメージが定番)
  • 設定の見通しが良い(locationでルールを書くのが直感的)

nginxのデメリット(ハマりどころ)

  • .htaccess がない:設定は基本的に中央集権(チーム運用で好みが分かれる)
  • 書き方の癖:正規表現locationや優先順位で意図しないマッチが起きることがある
  • 動的コンテンツは別プロセス前提:PHPは php-fpm、Nodeは upstream など(構成理解が必要)

現場のリアル:「nginxを入れたけどアプリが動かない」の8割は、プロキシ先(upstream)の疎通ポート設定反映忘れです。この記事のテスト手順で潰せます。

Docker+Ubuntuで「nginx インストール」してテストする(最短ルート)

ここからは「DockerでUbuntuコンテナを起動 → その中でnginxをインストール → 設定 → テスト」までやります。
ローカルPCでもサーバーでも同じ感覚で再現できるので、学習にも検証にも便利です。

前提

  • Dockerがインストール済み(Docker Desktop / Docker Engine どちらでもOK)
  • 手元のターミナルが使える

1) Ubuntuコンテナを起動する

まずはUbuntu(例:24.04)を起動します。

docker run --name ubuntu-nginx -it --rm -p 8080:80 ubuntu:24.04 bash

ポイント
-p 8080:80 で「ホストの8080 → コンテナの80」を転送します。
ブラウザは http://localhost:8080 を叩けばOK。

2) Ubuntuにnginxをインストールする(apt版)

Ubuntuのチュートリアルでは、まず apt update して apt install nginx の流れが定番です。

apt update
apt install -y nginx curl

3) nginxを起動して、Welcomeページを確認する

コンテナ内でnginxを起動します。systemdがないので、まずはnginxコマンドで起動するのが簡単です。

nginx

次に設定テスト(構文チェック)もやっておきます。

nginx -t

コンテナ内から疎通確認:

curl -I http://127.0.0.1/

ホスト(あなたのPC)から疎通確認:ブラウザで

http://localhost:8080

「Welcome to nginx」が出れば成功です(Ubuntu公式の手順でも同様の確認を案内しています)。

4) nginxの設定ファイル場所を押さえる(Ubuntu)

  • メイン:/etc/nginx/nginx.conf
  • サイト定義:/etc/nginx/sites-available//etc/nginx/sites-enabled/
  • デフォルト:/etc/nginx/sites-enabled/default
  • ドキュメントルート(よくある):/var/www/html

設定を変えてみる:静的サイトを即席で差し替え

1) HTMLを置き換える

cat > /var/www/html/index.html <<'EOF'
<!doctype html>
<html lang="ja">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>nginx インストール テスト</title></head>
<body>
<h1>nginx OK</h1>
<p>Docker+Ubuntuでnginxが動いています。</p>
</body>
</html>
EOF

2) 設定テスト → リロード

nginx -t
nginx -s reload

再度 http://localhost:8080 を開き、ページが差し替わっていればOK。

リバースプロキシまでやる:/api を別サービスへ流す(実務の型)

nginxが「入口」として強い理由のひとつがリバースプロキシです。公式イメージも含め、Docker運用で定番の使い方です。

1) まずは別の簡易HTTPサーバーを立てる(同一コンテナ内で検証)

デモとしてPythonの簡易サーバーを 127.0.0.1:9000 で起動します。

apt install -y python3
python3 -m http.server 9000 --bind 127.0.0.1

このコマンドはフォアグラウンドなので、別ターミナルを開くか、Ctrl+Z などで切り替えながら進めてください。

2) nginx側の設定を追加する

デフォルトのサイト設定を編集して、/api/ を 9000 にプロキシします。

sed -i 's|try_files \\$uri \\$uri/ =404;|try_files \\$uri \\$uri/ =404;\\n\\n\\tlocation /api/ {\\n\\t\\tproxy_pass http://127.0.0.1:9000/;\\n\\t\\tproxy_set_header Host \\$host;\\n\\t\\tproxy_set_header X-Real-IP \\$remote_addr;\\n\\t\\tproxy_set_header X-Forwarded-For \\$proxy_add_x_forwarded_for;\\n\\t\\tproxy_set_header X-Forwarded-Proto \\$scheme;\\n\\t}\\n|g' /etc/nginx/sites-available/default

テストしてリロード:

nginx -t
nginx -s reload

3) 動作確認

curl -I http://127.0.0.1/api/
# ホスト側なら:
# curl -I http://localhost:8080/api/

これで「/ はnginxの静的配信」「/api は別サーバーへ中継」という、実務の入口パターンが作れます。

もっと実務っぽく:Dockerでnginx公式イメージを使う(超定番)

「検証はUbuntu内でapt」「本番はnginx公式イメージで最小構成」という運用も多いです。公式DockerイメージはDocker Hubにあります。

最短:nginxコンテナを起動して動作確認

docker run --name some-nginx -d -p 8080:80 nginx

これで http://localhost:8080 にWelcomeページが出ます(有名な最短例)。

設定やHTMLを差し替える(ボリュームマウント)

例:カレントに html/conf.d/ を用意してマウントします。

# フォルダ作成
mkdir -p html conf.d

# html/index.html 作成(例)
cat > html/index.html <<'EOF'
<h1>nginx インストール(Docker版)OK</h1>
EOF

# conf.d/default.conf 作成(例)
cat > conf.d/default.conf <<'EOF'
server {
listen 80;
server_name localhost;

root /usr/share/nginx/html;
index index.html;

location / {
  try_files $uri $uri/ =404;
}
}
EOF

# 起動
docker run --rm --name nginx-mount -p 8080:80 \
-v "$(pwd)/html:/usr/share/nginx/html:ro" \
-v "$(pwd)/conf.d:/etc/nginx/conf.d:ro" \
nginx

「nginxが動かない」時の切り分けチェックリスト(最短で潰す)

  1. 設定ファイルの構文チェックnginx -t
  2. プロセスが起動してるかps aux | grep nginx
  3. 80番をlistenしてるかss -lntp | grep ':80'
  4. コンテナ外からポート転送できてるかdocker ps0.0.0.0:8080->80/tcp を確認
  5. curlでHTTPヘッダ確認curl -I http://localhost:8080
  6. リバースプロキシ先が生きてるかcurl -I http://127.0.0.1:9000(先に上流を確認)

現場の小ワザ:設定変更をしたら「いきなり再起動」ではなく、

  • nginx -t(まず壊れてないか)
  • nginx -s reload(無停止リロード)

この順番にすると、事故率がグッと下がります。

apt版と公式リポジトリ版:どっちで入れるべき?

Ubuntuでは apt install nginx が手軽で、公式チュートリアルでも案内されています。
一方で「より新しい安定版を使いたい」「公式パッケージリポジトリを使いたい」場合は、nginx.orgの手順で公式リポジトリを追加して入れる方法もあります。

  • まず動かす/学習/検証:UbuntuのaptでOK
  • バージョン要件/モジュール要件がある:nginx.orgの公式リポジトリを検討
  • 本番がコンテナ:nginx公式Dockerイメージが無難

まとめ:nginx インストールは「入口設計」までやって初めて価値が出る

  • nginxはWebサーバーだけでなく、リバースプロキシ/LB/キャッシュが強い定番ツール
  • Apacheとの違いは「思想(接続処理モデル)と運用文化」が大きい。選定は用途で割り切る
  • Docker+Ubuntuなら「aptで入れて動かす → nginx -t → curl」で最短検証できる
  • 実務は「静的配信+リバースプロキシ」までセットで覚えると一気に強くなる

 
※参考にされる場合は自己責任でお願いします。

この記事の運営者(IT部長)からのお知らせ

PCトラブルは解決しましたか?

もし「会社のPCが全部遅い」「Office 365のエラーが多発する」「ネットワークが不安定」といった、調べても解決しない「会社全体」のお悩みがありましたら、ぜひご相談ください。

「Windows11 高速化」といったお悩み検索で毎月1,200人以上が訪れる、
このサイトの運営者
(建設会社IT部長)が、川崎・横浜・東京城南エリアの法人様限定で「無料ITお困りごと診断」を行っています。