コンテンツにスキップ

serverとlocation

nginx では、server が仮想サーバーを表し、location が URI ごとの処理を表す。


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 は、nginx が接続を受ける IP アドレスとポートを指定する。

listen 80;
listen 443 ssl;
listen [::]:443 ssl;

listen 80 は HTTP、listen 443 ssl は HTTPS の入口として使うことが多い。ssl パラメータを付けると、その port で受けた接続を TLS として処理する。


server_name は、どの Host ヘッダーをこの server ブロックで扱うかを指定する。

server_name www.example.com example.com;

同じ IP アドレスと port で複数の Web サイトを動かす場合、nginx は server_name を見てどの server ブロックを使うかを選ぶ。


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 / 通常の prefix match
location /api/ /api/ から始まる URI に一致
location = /healthz 完全一致
location ~ \.php$ 正規表現一致
location ^~ /static/ prefix match を優先し、正規表現 location の探索を止める

正確な location 選択には細かい規則がある。まずは「URI に応じて処理を分岐する場所」として理解し、複数の location が重なる構成では nginx -T で実際の設定を確認する。


静的ファイルを返すときは、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 とパスの結合方法が違うため、混同しない。