Ubuntuで始めるNginx活用術|Webサーバー構築と管理の秘訣

目次

はじめに

イントロ

本記事は、Ubuntu環境でNginxを使ってWebサーバーを構築・運用する手順をわかりやすく解説します。Nginxは軽くて高速なWebサーバーで、静的ファイルの配信やリバースプロキシとして広く使われています。例えば、個人サイトの公開や、アプリケーションの前段に置く用途に適しています。

本記事の目的

初心者の方でも、実際に手を動かしながらNginxを導入し、安全に運用できる状態まで到達できることを目標とします。インストールから基本設定、ファイアウォールの設定、動作確認、さらにセキュリティ強化や性能改善まで順を追って説明します。

対象読者

  • Ubuntuを使っている方
  • 基本的なコマンド操作に慣れている方(sudoが使える程度)
  • Webサーバーの導入や管理を初めて行う方

前提と準備物

  • Ubuntu(18.04/20.04/22.04など)
  • 管理者権限(sudo)
  • インターネット接続

進め方

各章で具体的なコマンドと設定例を示します。設定ファイルの意味も丁寧に解説しますので、初めての方でも理解しやすい構成にしています。始める前に環境を確認して準備を整えてください。

Nginxのインストール

準備

サーバーにログインし、ネットワーク接続を確認します。作業は管理者権限(sudo)で行います。失敗を避けるため、重要なデータは事前にバックアップしてください。

インストール手順

  1. パッケージ情報を最新にします:
sudo apt update
  1. 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アクセスを受けるにはこれらのポートを許可する必要があります。

手順

  1. SSHでサーバに接続します。リモートの場合はSSHを開放していることを確認してください(例: sudo ufw allow OpenSSH)。
  2. HTTPポートを許可します:

sudo ufw allow ‘Nginx HTTP’

  1. HTTPSポートを許可します:

sudo ufw allow ‘Nginx HTTPS’

  1. 設定を反映します:

sudo ufw reload

  1. 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

ログや負荷を監視し、必要なら設定値を調整してください。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次