🧑💻
Webサーバーソフトウェアとnginx(エンジンエックス)
Webサーバーソフトウェアとは
Webサーバーソフトウェアとは、インターネットからのアクセスを受け付けて、適切に処理を振り分けるソフトウェアです。現代のWeb運用において中核を担う重要なコンポーネントです。その中の一つが、今回解説するnginxです。
歴史的背景と進化
-
初期(1990年代)
- Apache HTTP Serverが主流
- HTTPによる単純な通信が標準
- 小規模なWebサイト運用が中心
-
転換期(2000年代前半)
- Webサイトの大規模化
- C10K問題(1万以上の同時接続)への対応が課題に
- HTTPSの必要性が増加(ECサイトの普及)
- nginxの登場で効率的な処理が可能に
-
現代(2015年以降)
- HTTPSの一般化(Let's Encrypt登場)
- 同時接続数の更なる増加
- クラウド・コンテナ環境の普及
Webサーバーソフトウェアが解決する主要な課題
-
パフォーマンスの課題
- 大量の同時接続処理
- 効率的なリソース使用
- 高速なレスポンス
-
プロトコルの課題
- HTTP/HTTPS双方への対応
- 適切なリダイレクト処理
- SSL/TLS終端処理
-
システム構成の課題
- リバースプロキシ
- ロードバランシング
- マイクロサービス間の通信
nginxが選ばれる理由
-
技術的優位性
- イベント駆動型による効率的な処理
- 少ないメモリでの動作
- 高い安定性
-
運用上の利点
- シンプルな設定
- 柔軟なルーティング
- 効率的なSSL/TLS処理
実際の使用例
-
基本的なWebサーバーとして
- 静的コンテンツの配信
- HTTPSへの自動リダイレクト
- SSL/TLS証明書の管理
-
リバースプロキシとして
- 複数バックエンドの集約
- 内部サービスの保護
- トラフィックの制御
-
ロードバランサーとして
- トラフィックの分散
- ヘルスチェック
- セッション永続性の管理
ディレクトリ構造
/etc/nginx/
├── nginx.conf # メインの設定ファイル
├── conf.d/ # 追加の設定ファイルディレクトリ
│ └── *.conf # 追加の設定ファイル
├── sites-available/ # 利用可能なサイト設定を格納
│ ├── default # デフォルトサイトの設定
│ └── example.com # 特定のドメインの設定
├── sites-enabled/ # 有効なサイト設定(シンボリックリンク)
│ └── default -> ../sites-available/default
├── modules-available/ # 利用可能なnginxモジュールの設定
├── modules-enabled/ # 有効化されたモジュール(シンボリックリンク)
└── snippets/ # 再利用可能な設定スニペットを格納 # Nginxの実行中プロセスIDを格納
# システムがNginxプロセスを管理するのに使用
OSにインストールしたときに下記のようにディレクトリが追加される。(Linuxの場合)
/
├── etc/
│ └── nginx/ # nginxの設定ファイルディレクトリ
│ ├── nginx.conf # メイン設定ファイル
│ ├── conf.d/ # 追加の設定ファイル
│ └── sites-available/ # 利用可能なサイト設定
├── var/
│ ├── log/
│ │ └── nginx/ # nginxのログファイルディレクトリ
│ │ ├── access.log
│ │ └── error.log
│ └── www/
│ └── html/ # デフォルトのWebコンテンツディレクトリ
├── usr/
│ ├── sbin/
│ │ └── nginx # nginxの実行ファイル
│ └── share/
│ └── nginx/ # 共有データファイル(デフォルトのhtml等)
└── run/
└── nginx.pid # 実行中のnginxプロセスIDファイル
サーバーブロックとは
サーバーブロックは、nginxの設定の基本単位となるブロックです。Webサイトやアプリケーションの振る舞いを定義します。上記の*.confの中に記述します。
複数のサーバーブロックを設定することで、1台のサーバーで複数のWebサイトを運用することも可能です(これをバーチャルホストと呼びます)。
基本的な設定例
最もシンプルなサーバーブロックの例を見てみましょう:
server {
listen 80; # 待ち受けるポート
server_name example.com; # ドメイン名
root /var/www/html; # ドキュメントルート
index index.html; # デフォルトファイル
# URLパスごとの設定
location / {
try_files $uri $uri/ =404;
}
}
HTTPSの設定例
SSL/TLSを使用したHTTPS通信の設定例です:
nginxCopyserver {
listen 443 ssl; # HTTPSポート
server_name example.com;
# BASIC認証
auth_basic "Restricted Access";
auth_basic_user_file "/home/somoething/.htpasswd";
# SSL証明書の設定
ssl_certificate /etc/nginx/ssl/cert.pem; # 証明書
ssl_certificate_key /etc/nginx/ssl/private.key; # 秘密鍵
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
プロキシ設定の例
バックエンドのアプリケーションサーバーへリクエストを転送する設定例です:
nginxCopyserver {
listen 80;
server_name example.com;
# バックエンドへ転送
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
バーチャルホストの設定例
1台のサーバーで複数のWebサイトを運用する設定例です:
nginxCopy# メインサイト用の設定
server {
listen 80;
server_name example.com;
root /var/www/main;
}
# サブドメイン用の設定
server {
listen 80;
server_name blog.example.com;
root /var/www/blog;
}
よく使う設定オプション
基本設定
listen: ポート指定
server_name: ドメイン名
root: ドキュメントルート
index: デフォルトファイル
location ディレクティブ
location /: URLパスごとの設定
try_files: ファイル探索順
proxy_pass: プロキシ先指定
return: リダイレクト
ログ設定
nginxCopyserver {
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
HTTPからHTTPSへのリダイレクト設定
セキュリティ向上のためによく使用される設定例です:
nginxCopyserver {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
以上です。
Discussion