「NginX- serverコンテキスト」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「== 概要 == serverコンテキストは、仮想サーバを定義するための基本的な構成要素である。<br> このコンテキストは、常にhttpコンテキスト内に配置され、1つのNginXサーバーで複数の仮想ホストを運用することを可能にする。<br> <br> 主要な機能として、特定のIPアドレスやポートでのリクエスト待ち受け、ドメイン名の設定、SSLの設定、静的ファイルの配…」) |
|||
26行目: | 26行目: | ||
== locationコンテキスト == | == locationコンテキスト == | ||
==== $ | ==== 基本的なディレクティブ ==== | ||
$ | * root | ||
*: ドキュメントルートの指定 | |||
* alias | |||
*: 特定のパスへのエイリアス設定 | |||
* index | |||
*: インデックスファイルの指定 | |||
<br> | |||
<syntaxhighlight lang="nginx"> | |||
# 静的ファイルの配信例 | |||
location / { | |||
root /var/www/html; | |||
index index.html; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== アクセス制御 ==== | |||
* allow / deny | |||
*: IPベースのアクセス制限 | |||
* auth_basic | |||
*: Basic認証の設定 | |||
* auth_request | |||
*: 外部認証の設定 | |||
<br> | |||
<syntaxhighlight lang="nginx"> | |||
# 特定ファイルへのアクセス制限例 | |||
# ドキュメントルートの".ht"から始まるファイルはアクセス不可 | |||
location ~ /\.ht { | |||
deny all; | |||
} | |||
<br> | |||
<syntaxhighlight lang="nginx"> | |||
# BASIC認証の設定例 | |||
location /admin { | |||
auth_basic "Restricted Area"; | |||
auth_basic_user_file /etc/nginx/.htpasswd; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="nginx"> | |||
# ダイジェスト認証の設定例 | |||
# より安全な認証方式であり、パスワードをハッシュ化して送信する | |||
location /secure { | |||
auth_digest "Private Area"; | |||
auth_digest_user_file /etc/nginx/htdigest; | |||
auth_digest_timeout 30s; | |||
auth_digest_expires 300s; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="nginx"> | |||
# 外部認証の設定例 | |||
# サーバでユーザ認証を行い、その結果に基づいてアクセスを制御する | |||
location /private { | |||
auth_request /auth; | |||
auth_request_set $auth_status $upstream_status; | |||
location = /auth { | |||
internal; | |||
proxy_pass http://auth-server/verify; | |||
proxy_pass_request_body off; | |||
proxy_set_header Content-Length ""; | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== プロキシ関連 ==== | |||
* proxy_pass | |||
*: リバースプロキシの設定 | |||
* proxy_set_header | |||
*: プロキシヘッダの設定 | |||
* proxy_redirect | |||
*: リダイレクトの制御 | |||
<br> | |||
<syntaxhighlight lang="nginx"> | |||
# プロキシ設定例 | |||
location /api { | |||
proxy_pass http://backend_server; | |||
proxy_set_header Host $host; | |||
proxy_set_header X-Real-IP $remote_addr; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== ファイル処理 ==== | |||
* try_files | |||
*: ファイル検索順序の指定 | |||
* autoindex | |||
*: ディレクトリリスティングの制御 | |||
* expires | |||
*: キャッシュ制御 | |||
<br> | |||
<syntaxhighlight lang="nginx"> | |||
# キャッシュ制御の例 | |||
location /static { | |||
expires 30d; | |||
add_header Cache-Control "public, no-transform"; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== FastCGI設定 ==== | |||
* fastcgi_pass | |||
*: FastCGIサーバの指定 | |||
* fastcgi_param | |||
*: FastCGIパラメータの設定 | |||
<br> | |||
<syntaxhighlight lang="nginx"> | |||
# FastCGIの設定例 | |||
# PHPアプリケーションとの連携に必要なバッファ設定やパス情報の処理を含む | |||
location ~ \.php$ { | |||
fastcgi_pass unix:/var/run/php/php-fpm.sock; | |||
fastcgi_split_path_info ^(.+\.php)(/.+)$; | |||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | |||
fastcgi_param PATH_INFO $fastcgi_path_info; | |||
fastcgi_buffers 16 16k; | |||
fastcgi_buffer_size 32k; | |||
include fastcgi_params; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== エラー処理 ==== | |||
様々なHTTPエラーに対してカスタムレスポンスが設定できる。<br> | |||
<br> | |||
* error_page | |||
*: エラーページの指定 | |||
* return | |||
*: HTTPリターンコードとURLの設定 | |||
<br> | |||
<syntaxhighlight lang="nginx"> | |||
# エラーページとリターン例 | |||
location /download { | |||
error_page 404 /404.html; | |||
error_page 500 502 503 504 /50x.html; | |||
location = /404.html { | |||
internal; | |||
return 404 "File not found.\n"; | |||
} | |||
location = /50x.html { | |||
internal; | |||
return 500 "Server error occurred.\n"; | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== リライト / リダイレクト ==== | |||
* rewrite | |||
*: URLリライトルールの設定 | |||
* redirect | |||
*: リダイレクトの設定 | |||
<br> | |||
<syntaxhighlight lang="nginx"> | |||
# リライトとリダイレクトの設定例 | |||
# URLの書き換えやリダイレクトが設定できる | |||
# 以下の例では、lastフラグで処理を終了して、permanentフラグで301リダイレクトを指定している | |||
location /old-page { | |||
# 301永続的リダイレクト | |||
return 301 /new-page; | |||
} | |||
location /blog { | |||
# URLの書き換え | |||
rewrite ^/blog/(\d{4})/(\d{2})/(\d{2})/(.*)$ /posts/$1-$2-$3-$4 last; | |||
# 条件付きリライト | |||
if ($host ~* ^www\.(.*)) { | |||
rewrite ^(.*)$ http://$1$1 permanent; | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== CORS設定 ==== | |||
* add_header | |||
*: クロスオリジン制御用ヘッダの追加 | |||
<br> | |||
==== SSI (Server Side Includes) ==== | |||
* ssi | |||
*: SSIの有効化 / 無効化 | |||
<br> | |||
==== PHP-FPM連携 ==== | |||
<syntaxhighlight lang="nginx"> | |||
# PHP-FPM連携例 | |||
location ~ \.php$ { | |||
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; | |||
fastcgi_index index.php; | |||
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; | |||
include fastcgi_params; | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
==== $realpath_root / $document_rootの違い ==== | |||
* $realpath_root | * $realpath_root | ||
*: シンボリックリンクを解決して実際の物理パスを返す。 | *: シンボリックリンクを解決して実際の物理パスを返す。 | ||
43行目: | 242行目: | ||
* fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; | * fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; | ||
* fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | * fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | ||
<br> | |||
<br><br> | <br><br> | ||
2024年11月30日 (土) 01:11時点における版
概要
serverコンテキストは、仮想サーバを定義するための基本的な構成要素である。
このコンテキストは、常にhttpコンテキスト内に配置され、1つのNginXサーバーで複数の仮想ホストを運用することを可能にする。
主要な機能として、特定のIPアドレスやポートでのリクエスト待ち受け、ドメイン名の設定、SSLの設定、静的ファイルの配信設定、プロキシ設定等がある。
serverディレクティブの用途を以下に示す。
- ポート番号の指定 (listen)
- サーバ名の設定 (server_name)
- ドキュメントルートの指定 (root)
- SSL / TLS設定
- ロケーション設定
- リダイレクト設定
また、バーチャルホスティングにおいても、同一サーバ上で異なるドメインのWebサイトを運用することができる。
設定の継承関係について、serverコンテキスト内の設定は、より上位のhttpコンテキストからデフォルト値を継承する。
さらに、serverコンテキスト内のlocationコンテキストは、serverコンテキストの設定を継承する。
これにより、効率的で柔軟な設定管理が可能になる。
セキュリティにおいては、SSL / TLS証明書の設定、アクセス制限、リダイレクトルールの設定等が可能であり、安全なWebサービスの提供に貢献する。
また、エラーページのカスタマイズやログの設定も行うことができる。
パフォーマンスの最適化では、キャッシュ設定、バッファサイズの調整、接続数の制限等を設定することができるため、リソース管理が可能である。
locationコンテキスト
基本的なディレクティブ
- root
- ドキュメントルートの指定
- alias
- 特定のパスへのエイリアス設定
- index
- インデックスファイルの指定
# 静的ファイルの配信例
location / {
root /var/www/html;
index index.html;
}
アクセス制御
- allow / deny
- IPベースのアクセス制限
- auth_basic
- Basic認証の設定
- auth_request
- 外部認証の設定
# 特定ファイルへのアクセス制限例
# ドキュメントルートの".ht"から始まるファイルはアクセス不可
location ~ /\.ht {
deny all;
}
<br>
<syntaxhighlight lang="nginx">
# BASIC認証の設定例
location /admin {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
# ダイジェスト認証の設定例
# より安全な認証方式であり、パスワードをハッシュ化して送信する
location /secure {
auth_digest "Private Area";
auth_digest_user_file /etc/nginx/htdigest;
auth_digest_timeout 30s;
auth_digest_expires 300s;
}
# 外部認証の設定例
# サーバでユーザ認証を行い、その結果に基づいてアクセスを制御する
location /private {
auth_request /auth;
auth_request_set $auth_status $upstream_status;
location = /auth {
internal;
proxy_pass http://auth-server/verify;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
}
}
プロキシ関連
- proxy_pass
- リバースプロキシの設定
- proxy_set_header
- プロキシヘッダの設定
- proxy_redirect
- リダイレクトの制御
# プロキシ設定例
location /api {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
ファイル処理
- try_files
- ファイル検索順序の指定
- autoindex
- ディレクトリリスティングの制御
- expires
- キャッシュ制御
# キャッシュ制御の例
location /static {
expires 30d;
add_header Cache-Control "public, no-transform";
}
FastCGI設定
- fastcgi_pass
- FastCGIサーバの指定
- fastcgi_param
- FastCGIパラメータの設定
# FastCGIの設定例
# PHPアプリケーションとの連携に必要なバッファ設定やパス情報の処理を含む
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
}
エラー処理
様々なHTTPエラーに対してカスタムレスポンスが設定できる。
- error_page
- エラーページの指定
- return
- HTTPリターンコードとURLの設定
# エラーページとリターン例
location /download {
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /404.html {
internal;
return 404 "File not found.\n";
}
location = /50x.html {
internal;
return 500 "Server error occurred.\n";
}
}
リライト / リダイレクト
- rewrite
- URLリライトルールの設定
- redirect
- リダイレクトの設定
# リライトとリダイレクトの設定例
# URLの書き換えやリダイレクトが設定できる
# 以下の例では、lastフラグで処理を終了して、permanentフラグで301リダイレクトを指定している
location /old-page {
# 301永続的リダイレクト
return 301 /new-page;
}
location /blog {
# URLの書き換え
rewrite ^/blog/(\d{4})/(\d{2})/(\d{2})/(.*)$ /posts/$1-$2-$3-$4 last;
# 条件付きリライト
if ($host ~* ^www\.(.*)) {
rewrite ^(.*)$ http://$1$1 permanent;
}
}
CORS設定
- add_header
- クロスオリジン制御用ヘッダの追加
SSI (Server Side Includes)
- ssi
- SSIの有効化 / 無効化
PHP-FPM連携
# PHP-FPM連携例
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
$realpath_root / $document_rootの違い
- $realpath_root
- シンボリックリンクを解決して実際の物理パスを返す。
- より安全で確実な参照が可能となる。
- $document_root
- 設定ファイルで指定されたrootディレクティブの値をそのまま使用する。
- シンボリックリンクが解決されない
一般的な環境では両者は同じ結果になる。
しかし、セキュリティを重視する場合は$realpath_rootが推奨される。
特に、シンボリックリンクを使用している環境では、この違いが重要になる。
- fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;