serverとlocation
nginx では、
serverが仮想サーバーを表し、locationが URI ごとの処理を表す。
serverとは
Section titled “serverとは”server ブロックは、どのポートで待ち受け、どのホスト名のリクエストを処理するかを決める単位である。
server { listen 80; server_name www.example.com;
root /var/www/www.example.com/html; index index.html;
location / { try_files $uri $uri/ =404; }}この例では、nginx は port 80 で HTTP を受け、Host が www.example.com のリクエストを処理する。
listen
Section titled “listen”listen は、nginx が接続を受ける IP アドレスとポートを指定する。
listen 80;listen 443 ssl;listen [::]:443 ssl;listen 80 は HTTP、listen 443 ssl は HTTPS の入口として使うことが多い。ssl パラメータを付けると、その port で受けた接続を TLS として処理する。
server_name
Section titled “server_name”server_name は、どの Host ヘッダーをこの server ブロックで扱うかを指定する。
server_name www.example.com example.com;同じ IP アドレスと port で複数の Web サイトを動かす場合、nginx は server_name を見てどの server ブロックを使うかを選ぶ。
locationとは
Section titled “locationとは”location は、URI のパスごとに処理を分ける単位である。
location / { try_files $uri $uri/ =404;}
location /api/ { proxy_pass http://127.0.0.1:3000/;}
location /admin/ { auth_pam "LDAP Login"; auth_pam_service_name nginx; proxy_pass http://127.0.0.1:3000/;}同じ server の中でも、/、/api/、/admin/ で別の処理をさせられる。
locationの種類
Section titled “locationの種類”代表的な書き方は次のとおり。
| 書き方 | 意味 |
|---|---|
location / |
通常の prefix match |
location /api/ |
/api/ から始まる URI に一致 |
location = /healthz |
完全一致 |
location ~ \.php$ |
正規表現一致 |
location ^~ /static/ |
prefix match を優先し、正規表現 location の探索を止める |
正確な location 選択には細かい規則がある。まずは「URI に応じて処理を分岐する場所」として理解し、複数の location が重なる構成では nginx -T で実際の設定を確認する。
rootとalias
Section titled “rootとalias”静的ファイルを返すときは、root や alias を使う。
root /var/www/www.example.com/html;
location / { try_files $uri $uri/ =404;}root は、URI とファイルパスを組み合わせて探す。/img/logo.png へのリクエストなら、/var/www/www.example.com/html/img/logo.png を探す。
alias は、指定した location を別ディレクトリへ置き換える。root と alias は似ているが URI とパスの結合方法が違うため、混同しない。