はじめに
イントロ
本記事は、Ubuntu環境でNginxを使ってWebサーバーを構築・運用する手順をわかりやすく解説します。Nginxは軽くて高速なWebサーバーで、静的ファイルの配信やリバースプロキシとして広く使われています。例えば、個人サイトの公開や、アプリケーションの前段に置く用途に適しています。
本記事の目的
初心者の方でも、実際に手を動かしながらNginxを導入し、安全に運用できる状態まで到達できることを目標とします。インストールから基本設定、ファイアウォールの設定、動作確認、さらにセキュリティ強化や性能改善まで順を追って説明します。
対象読者
- Ubuntuを使っている方
- 基本的なコマンド操作に慣れている方(sudoが使える程度)
- Webサーバーの導入や管理を初めて行う方
前提と準備物
- Ubuntu(18.04/20.04/22.04など)
- 管理者権限(sudo)
- インターネット接続
進め方
各章で具体的なコマンドと設定例を示します。設定ファイルの意味も丁寧に解説しますので、初めての方でも理解しやすい構成にしています。始める前に環境を確認して準備を整えてください。
Nginxのインストール
準備
サーバーにログインし、ネットワーク接続を確認します。作業は管理者権限(sudo)で行います。失敗を避けるため、重要なデータは事前にバックアップしてください。
インストール手順
- パッケージ情報を最新にします:
sudo apt update
- Nginxをインストールします:
sudo apt install nginx
サービスの開始と自動起動設定
インストール後にサービスを起動し、自動で起動するように設定します:
sudo systemctl start nginx
sudo systemctl enable nginx
動作確認の方法
- サービス状態を確認:
sudo systemctl status nginx
- ブラウザでサーバーのIPまたはドメインにアクセスして、Nginxのデフォルトページが表示されるか確認します。
- コマンドで確認する場合:
curl -I http://localhost
よくある確認ポイント
- ファイアウォールで80/TCPが開放されているか確認してください。例:ufwを使う場合は
sudo ufw allow 'Nginx HTTP'。 - ログは/var/log/nginx/ にあります。問題があればerror.logを確認してください。
困ったときはエラーメッセージをそのまま検索すると解決策が見つかることが多いです。
基本的な設定と管理
設定ファイルの場所
Nginxのメイン設定は /etc/nginx/nginx.conf にあります。個々のサイト設定は /etc/nginx/sites-available/ に置き、/etc/nginx/sites-enabled/ にシンボリックリンクで有効化します。
仮想ホスト(serverブロック)の作成
仮想ホストとは、1台のサーバで複数のドメインを扱うための設定です。例として /etc/nginx/sites-available/example.com を作り、次のように記述します(簡略化):
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
}
このファイルを作成後、sites-enabled にリンクします:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
サイトの有効化と確認
設定を反映する前に構文チェックを行います:
sudo nginx -t
問題なければ再読み込みします:
sudo systemctl reload nginx
SSL(Let’s Encrypt)の導入
Certbotを使うと無料の証明書を自動取得できます(例: Ubuntu):
sudo apt install certbot python3-certbot-nginx
sudo certbot –nginx -d example.com -d www.example.com
CertbotはNginx設定を自動で書き換え、証明書パスは /etc/letsencrypt/live/example.com/ に配置されます。SSL設定の主要項目は次の通りです:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
自動更新の動作確認:
sudo certbot renew –dry-run
設定のテストとログ
設定変更後は必ず nginx -t で確認してください。問題がある場合は /var/log/nginx/error.log を確認し、アクセスログは /var/log/nginx/access.log で状況を把握します。
注意点
ドキュメントルートの権限や所有者を正しく設定してください。ポート80/443がファイアウォールで開いていることも確認してください。
ファイアウォールの設定
概要
この章ではUFW(Uncomplicated Firewall)を使ってNginxのHTTP(ポート80)とHTTPS(ポート443)を開放する手順を説明します。外部からWebアクセスを受けるにはこれらのポートを許可する必要があります。
手順
- SSHでサーバに接続します。リモートの場合はSSHを開放していることを確認してください(例: sudo ufw allow OpenSSH)。
- HTTPポートを許可します:
sudo ufw allow ‘Nginx HTTP’
- HTTPSポートを許可します:
sudo ufw allow ‘Nginx HTTPS’
- 設定を反映します:
sudo ufw reload
- UFWが無効なら有効化します:
sudo ufw enable
確認方法
設定後は次のコマンドで状態を確認します:
sudo ufw status verbose
ここでNginx HTTP(80/tcp)とNginx HTTPS(443/tcp)がALLOWになっていれば成功です。
よくある注意点
- リモートで作業する場合、まずSSHを許可しないと接続できなくなります。必ず先にSSHを許可してください。
- 既に別のファイアウォールやクラウドプロバイダのセキュリティグループがある場合は、そちらの設定も確認してください。
- IPv6を利用する環境ではUFWのIPv6設定を有効にする必要があります(/etc/ufw/ufw.conf)。
以上で、UFWを使ったNginx用の基本的なポート開放の説明は終わりです。必要があれば、追加の例やトラブルシューティングもご案内します。
Nginxのテストと確認
サービスの状態確認
まずはサービスの状態を確認します。端末で次のように入力してください。
sudo systemctl status nginx
「active (running)」となっていれば稼働中です。止まっている場合は sudo systemctl start nginx で起動します。
ブラウザでの確認
サーバーのIPアドレス(例: 192.0.2.10)をブラウザのアドレス欄に入力します。Nginxのデフォルトページが表示されれば、HTTPでの応答が正しく届いています。
コマンドラインでの追加確認
ブラウザが使えない場合は curl を使います。
curl -I http://サーバーのIP
HTTPヘッダーの200番台が返れば成功です。設定ファイルを確認するには sudo nginx -t を実行し、エラーがないか確かめます。
ポートとログの確認
ポート80で待ち受けているかは次のコマンドで確認します。
sudo ss -tlnp | grep :80
問題があるときはログを確認します。
sudo tail -n 50 /var/log/nginx/error.log
sudo tail -n 50 /var/log/nginx/access.log
journalctl -u nginx -e も有用です。
トラブルシューティングの流れ(例)
1) nginx -t で設定をチェック
2) 設定に問題なければ sudo systemctl restart nginx
3) それでも動かない場合はエラーログを確認し、よくある原因(設定ミス、ポート競合、ファイアウォール)を順に調べます。
ここまででNginxが正しく動作しているかを確実に確認できます。
セキュリティとパフォーマンスチューニング
概要
セキュリティ強化では不要なHTTPメソッドの無効化やファイアウォール設定を行います。パフォーマンスではワーカープロセスやキャッシュを調整し、効率的な運用を目指します。
不要なHTTPメソッドの無効化
不要なメソッドは攻撃に使われることがあります。サーバーブロックやlocationで制限します。例:
location / {
limit_except GET POST {
deny all;
}
}
これでGETとPOST以外を拒否します。
基本的なファイアウォール設定
UbuntuならUFWで簡単に制御できます。例:
sudo ufw allow 'Nginx Full'
sudo ufw enable
細かく制御する場合はiptablesでポートやIPを制限します。
SSL/TLSとヘッダー設定
証明書はcertbot等で取得し、HTTPはHTTPSへリダイレクトします。不要な情報は隠します。例:
server_tokens off;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
レート制限とサイズ制限
アクセス集中やブルートフォース対策に有効です。例:
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
}
location /login {
limit_req zone=one burst=20 nodelay;
}
client_max_body_size 10M;
パフォーマンスチューニング(基本)
- worker_processes auto;
- events { worker_connections 1024; }
- sendfile on; tcp_nopush on; tcp_nodelay on;
- keepalive_timeout 15;
キャッシュ設定の例
リバースプロキシや静的ファイルで効果的です。例:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:10m max_size=1g inactive=60m;
location /static/ {
proxy_cache mycache;
proxy_pass http://backend;
}
モニタリングと適用手順
変更は常に検証します。
sudo nginx -t
sudo systemctl reload nginx
ログや負荷を監視し、必要なら設定値を調整してください。












