開発運用

Nginxのインストールと設定

Nginxは、軽量で高性能なウェブサーバーソフトウェアとして、ウェブサイトのホスティングやリバースプロキシ、ロードバランシングなど多岐にわたる用途で使用されています。この記事では、Nginxのインストールから設定、運用方法までを詳しく解説します。

1. Nginxのインストール

まず最初に、Nginxをインストールします。多くのLinuxディストリビューションでは、Nginxは公式リポジトリに含まれているため、パッケージマネージャを利用して簡単にインストールできます。ここでは、Ubuntuを例にインストール手順を説明します。

1.1 パッケージの更新

インストールを開始する前に、パッケージリストを最新の状態に更新します。ターミナルで次のコマンドを実行します。

bash
sudo apt update

1.2 Nginxのインストール

次に、Nginxをインストールします。以下のコマンドでインストールできます。

bash
sudo apt install nginx

インストールが完了したら、Nginxが自動的に起動します。

1.3 インストールの確認

インストールが成功したかどうかを確認するため、ブラウザでサーバーのIPアドレスにアクセスします。例えば、http://your_server_ip にアクセスすると、Nginxのデフォルトのウェルカムページが表示されます。

また、以下のコマンドでNginxが正しく動作しているかを確認できます。

bash
sudo systemctl status nginx

2. Nginxの基本設定

Nginxをインストールしたら、次は設定ファイルの編集に進みます。Nginxの設定ファイルは/etc/nginx/nginx.confにあり、サーバーブロックは/etc/nginx/sites-available/ディレクトリに格納されています。

2.1 サーバーブロックの設定

サーバーブロック(仮想ホスト)は、異なるドメイン名やIPアドレスで異なるコンテンツを提供するために使用されます。/etc/nginx/sites-available/ディレクトリ内に新しい設定ファイルを作成します。

例えば、example.comというウェブサイトを設定する場合、次のように新しい設定ファイルを作成します。

bash
sudo nano /etc/nginx/sites-available/example.com

設定ファイルには以下の内容を記述します。

nginx
server { listen 80; server_name example.com www.example.com; root /var/www/example.com; index index.html; location / { try_files $uri $uri/ =404; } }

この設定ファイルでは、example.comというドメイン名に対して、/var/www/example.comディレクトリ内のコンテンツを提供する設定を行っています。

2.2 サーバーブロックの有効化

次に、この設定を有効にするために、sites-enabledディレクトリにシンボリックリンクを作成します。

bash
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

2.3 設定ファイルのテスト

設定ファイルにエラーがないかを確認するため、次のコマンドでNginxの設定をテストします。

bash
sudo nginx -t

問題がなければ、Nginxを再起動して設定を反映させます。

bash
sudo systemctl restart nginx

3. Nginxのセキュリティ設定

ウェブサーバーをインターネットに公開する場合、セキュリティ対策は重要です。以下に代表的なセキュリティ設定をいくつか紹介します。

3.1 HTTPヘッダーの強化

Nginxの設定で、HTTPヘッダーを強化することで、XSS攻撃やクリックジャッキング攻撃からサイトを守ることができます。設定ファイルに以下の内容を追加します。

nginx
add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

これにより、ブラウザがコンテンツを正しく解釈するようになります。

3.2 SSL/TLSの設定

ウェブサイトをHTTPS化するために、SSL/TLS証明書を設定します。無料の証明書を取得できるLet’s Encryptを使用する方法が一般的です。次に、certbotを使用してSSL証明書を設定する手順を紹介します。

3.2.1 Certbotのインストール
bash
sudo apt install certbot python3-certbot-nginx
3.2.2 SSL証明書の取得

次に、Certbotを使用してSSL証明書を取得します。

bash
sudo certbot --nginx -d example.com -d www.example.com

証明書の取得が完了したら、Nginxが自動的にHTTPS設定を追加します。証明書が正しく設定されているかを確認するため、ブラウザでhttps://example.comにアクセスします。

3.3 HTTP/2の有効化

NginxではHTTP/2を簡単に有効化できます。nginx.confやサーバーブロック設定で、listenディレクティブにhttp2オプションを追加します。

nginx
server { listen 443 ssl http2; server_name example.com www.example.com; # SSL設定... }

これにより、HTTP/2が有効になり、パフォーマンスが向上します。

4. Nginxのログ設定

Nginxはアクセスログとエラーログを記録します。デフォルトでは、/var/log/nginx/access.log/var/log/nginx/error.logに記録されます。ログを解析することで、サイトのパフォーマンスやトラフィックの問題を監視することができます。

4.1 ログのフォーマット変更

デフォルトのログフォーマットを変更するには、nginx.confhttpブロック内でlog_formatを設定します。

nginx
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';

これにより、ログに追加情報が記録されるようになります。

4.2 ログローテーション

アクセスログやエラーログは時間とともに膨大なサイズになることがあります。これを防ぐために、ログローテーションを設定します。logrotateを使ってNginxのログを定期的にローテートできます。

bash
sudo nano /etc/logrotate.d/nginx

設定ファイルに以下の内容を追加します。

bash
/var/log/nginx/*.log { daily rotate 14 compress delaycompress missingok notifempty create 640 www-data adm }

これにより、Nginxのログファイルが毎日ローテートされ、圧縮されます。

5. Nginxのパフォーマンス最適化

Nginxは非常に軽量で効率的ですが、大規模なトラフィックを扱う場合は、さらにパフォーマンスを最適化することができます。

5.1 キャッシュの設定

Nginxで静的コンテンツをキャッシュすることで、パフォーマンスを向上させることができます。以下の設定をserverブロック内に追加します。

nginx
location /static/ { expires 30d; add_header Cache-Control "public"; }

これにより、/static/ディレクトリ内のコンテンツは30日間キャッシュされます。

5.2 接続の制限

Nginxで大量の接続を効率的に処理するために、接続数を制限することができます。例えば、worker_connectionsの値を調整して、同時接続数を制限します。

nginx
worker_connections 1024;

6. Nginxの管理とメンテナンス

Nginxはsystemctlコマンドを使用して管理できます。以下のコマンドでNginxを操作できます。

  • Nginxの起動: sudo systemctl start nginx
  • Nginxの停止: sudo systemctl stop nginx
  • Nginxの再起動: sudo systemctl restart nginx
  • Nginxの再読み込み: sudo systemctl reload nginx
  • Nginxのステータス確認: sudo systemctl status nginx

まとめ

この記事では、Nginxのインストールから設定、運用までの基本的な手順を詳しく説明しました。Nginxは非常に高性能で柔軟なウェブサーバーであり、適切な設定と最適化を行うことで、大規模なトラフィックにも対応できる強力なインフラを構築できます。

Back to top button