【2026年版】Nginxの始め方 — 高速Webサーバーの設定入門


Nginx リバースプロキシの仕組み クライアント ブラウザ クライアント モバイル クライアント API呼び出し Nginx :80 / :443 SSL終端・ロードバランシング 静的ファイル配信 App Server 1 Node.js :3000 App Server 2 Python :8000 静的ファイル /var/www/html Nginxが一括でSSL終端・振り分け・キャッシュを担う
Nginxリバースプロキシのイメージ
🎚 難易度 ★☆☆ 初心者向け
⏱ 学習時間の目安 読むだけ10分、環境構築込み30分
📚 前提知識 Linuxの基本コマンド(ls, cd, sudo)が使える・テキストエディタで設定ファイルを編集できる
✅ このガイドで学べること
  • NginxをLinuxにインストールして起動できる
  • 静的ファイルを配信する基本設定ができる
  • リバースプロキシの設定ができる
  • Let's EncryptでHTTPS化できる

クイックリファレンス

インストールと基本操作

# Ubuntu/Debian
sudo apt update && sudo apt install nginx

# CentOS/RHEL
sudo dnf install nginx

# 起動・停止・再起動
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl reload nginx   # 設定リロード(ダウンタイムなし)

# 設定ファイルの構文チェック
sudo nginx -t

# バージョン確認
nginx -v

基本的なサーバーブロック設定

# /etc/nginx/sites-available/example.com
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.html;

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

リバースプロキシ設定

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Let’s Encrypt でHTTPS化

# certbot インストール
sudo apt install certbot python3-certbot-nginx

# 証明書取得 + Nginx設定自動更新
sudo certbot --nginx -d example.com -d www.example.com

# 自動更新のテスト
sudo certbot renew --dry-run

よく使うシンボリックリンク操作

# サイト有効化
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

# 設定反映
sudo nginx -t && sudo systemctl reload nginx

よくある詰まりポイント

Q. nginx -t は通るのにブラウザで開けない

A. ファイアウォールが原因のことが多いです。sudo ufw allow 'Nginx Full'(Ubuntu)または sudo firewall-cmd --add-service=http --permanent(CentOS)でポートを開けてください。セキュリティグループ設定(AWS/GCPの場合)も確認を。

Q. 403 Forbidden が出る

A. ドキュメントルートのパーミッション問題です。sudo chown -R www-data:www-data /var/www/example.com(Ubuntu)でNginxプロセスユーザーに所有権を変更してください。ディレクトリに 755、ファイルに 644 のパーミッションが標準です。

Q. proxy_pass を設定したのにバックエンドに繋がらない

A. バックエンドアプリが起動しているか curl localhost:3000 で確認してください。Nginxのエラーログ(/var/log/nginx/error.log)に connection refused と出ていれば、アプリ側の起動に問題があります。upstream ブロックで keepalive を設定するとコネクションプールが効いてパフォーマンスも上がります。

ひよこ ひよこ

Nginxってよく聞くけど、何をするものなの?

ペンギン先生 ペンギン先生

Nginxは高性能なWebサーバーだよ。ブラウザからのリクエストを受け取って、HTMLファイルや画像を返す役割をするんだ。もともとC10K問題(同時1万接続問題)を解決するために作られた、ノンブロッキングI/Oアーキテクチャが特徴だよ。

ひよこ ひよこ

ApacheNginxって何が違うの?

ペンギン先生 ペンギン先生

Apacheはリクエストごとにプロセススレッドを生やす方式で、Nginxイベント駆動で1プロセスが大量の接続を処理する方式だよ。だから静的ファイル配信や高トラフィックな環境ではNginxの方が圧倒的に速いんだ。

ひよこ ひよこ

リバースプロキシって何?直接アクセスじゃダメなの?

ペンギン先生 ペンギン先生

リバースプロキシはクライアントとバックエンドサーバーの間に立つ中継役だよ。Nginxが80番ポートでリクエストを受けて、裏のNode.jsアプリ(3000番ポート等)に転送するイメージ。SSL終端・ロードバランシング・キャッシュをまとめてNginxに任せられるから、アプリ本体はロジックだけに集中できるんだ。

ひよこ ひよこ

設定ファイルの書き方って難しそう…

ペンギン先生 ペンギン先生

基本はシンプルだよ。`/etc/nginx/nginx.conf` がメインで、`server` ブロックにドメインやルート、`location` ブロックにURLパスのルールを書くだけ。`nginx -t` でシンタックスチェックができるから、設定ミスもすぐわかるよ。

ひよこ ひよこ

HTTPSにするにはどうしたらいいの?

ペンギン先生 ペンギン先生

Let's Encryptの `certbot` を使うのが一番手軽だよ。`certbot --nginx -d example.com` を実行するだけで、証明書の取得からNginx設定の書き換えまで自動でやってくれるんだ。証明書の自動更新も `certbot renew` でできるよ。

ひよこ ひよこ

複数のサービスを同じサーバーで動かせるの?

ペンギン先生 ペンギン先生

もちろん!バーチャルホストという仕組みで、同じIPアドレスでも `server_name` が違えば別サービスとして扱えるよ。`/etc/nginx/sites-enabled/` にドメインごとの設定ファイルを置いて、`nginx -s reload` で反映するのが一般的なやり方だよ。

ひよこ ひよこ

パフォーマンスチューニングって何をするの?

ペンギン先生 ペンギン先生

主要なチューニングポイントは `worker_processes auto`(CPUコア数に合わせた自動設定)、`gzip on`(レスポンス圧縮)、`proxy_cache`(バックエンドレスポンスのキャッシュ)の3つだよ。あとは `keepalive_timeout` の調整とか、`sendfile on` でカーネルレベルのファイル転送を使うと静的ファイルがさらに速くなるよ。

次に学ぶなら