コンテンツにスキップ

nginxの全体像

nginx は、クライアントからの HTTP リクエストを受け取り、静的ファイル配信、TLS終端、リダイレクト、リバースプロキシ、アクセス制御などを行う Web サーバーである。


nginx は 1 つの機能だけを持つソフトウェアではない。設定によって、複数の役割を持つ。

役割 何をするか
静的ファイル配信 HTML、CSS、画像などをファイルシステムから返す
TLS終端 HTTPS 接続を受け、証明書と秘密鍵を使って TLS を処理する
リダイレクト HTTP から HTTPS へ移動させる
リバースプロキシ リクエストを背後のアプリケーションへ転送する
アクセス制御 Basic 認証、IP 制限、PAM 認証などで入口を制御する

nginx は、クライアントから受け取った HTTP リクエストを内容に応じて処理先へ振り分ける入口になる。


client
-> nginx
-> listenしているportを選ぶ
-> Hostヘッダーからserverを選ぶ
-> URIからlocationを選ぶ
-> static / redirect / proxy / auth などを実行する
-> responseを返す

nginx は、まず listen している IP アドレスとポートで接続を受ける。次に server_name などを使って server ブロックを選び、リクエスト URI に応じて location ブロックを選ぶ。

その location の中で、静的ファイルを返すのか、別の URL へリダイレクトするのか、バックエンドへ proxy_pass するのか、認証を要求するのかが決まる。


Debian / Ubuntu 系では、主な設定ファイルは次のように分かれる。

パス 役割
/etc/nginx/nginx.conf nginx 全体の設定
/etc/nginx/sites-available/ サイトごとの設定ファイルを置く場所
/etc/nginx/sites-enabled/ 有効化されたサイト設定へのシンボリックリンク
/etc/nginx/conf.d/ 追加設定を置く場所

sites-available に設定を書き、sites-enabled へシンボリックリンクを作る構成がよく使われる。ただし、これは Debian / Ubuntu 系のパッケージ構成であり、すべての OS で同じではない。


設定を変更したら、まず構文を確認する。

Terminal window
sudo nginx -t

問題がなければ nginx を reload する。

Terminal window
sudo systemctl reload nginx

restart はプロセスを再起動する。設定反映だけなら、通常は reload でよい。


  • nginx が HTTPS にしただけで、バックエンド通信まで暗号化されるとは限らない。
  • proxy_pass は単なる転送ではなく、URI の扱いが書き方で変わる。
  • nginx が PAM 認証を使う場合でも、nginx 自身が LDAP プロトコルを直接処理しているとは限らない。
  • Basic 認証はパスワードを送るため、HTTPS と組み合わせる前提で考える。