ドキュメント
a project

header

HTTPレスポンスヘッダーフィールドを操作します。ヘッダー値の設定、追加、削除、または正規表現を使用した置換を実行できます。

デフォルトでは、ヘッダーが削除されている(`-`プレフィックス)か、デフォルト値を設定している(`?`プレフィックス)場合を除き、ヘッダー操作はすぐに実行されます。これらの場合、ヘッダー操作はクライアントに書き込まれるまで自動的に遅延されます。

HTTPリクエストヘッダーを操作するには、`request_header`ディレクティブを使用できます。

構文

header [<matcher>] [[+|-|?|>]<field> [<value>|<find>] [<replace>]] {
	# Add
	+<field> <value>

	# Set
	<field> <value>

	# Set with defer
	><field> <value>

	# Delete
	-<field>

	# Replace
	<field> <find> <replace>

	# Replace with defer
	><field> <find> <replace>

	# Default
	?<field> <value>

	[defer]
}
  • **<field>** はヘッダーフィールドの名前です。

    プレフィックスがない場合、フィールドは設定(上書き)されます。

    `+`をプレフィックスすると、フィールドが既に存在する場合に上書き(設定)する代わりにフィールドが追加されます。ヘッダーフィールドはリクエストに複数回出現する可能性があります。

    `-`をプレフィックスすると、フィールドが削除されます。フィールドは、プレフィックスまたはサフィックス`*`ワイルドカードを使用して、一致するすべてのフィールドを削除できます。

    `?`をプレフィックスすると、フィールドのデフォルト値が設定されます。フィールドは、まだ存在しない場合にのみ書き込まれます。

    `>`をプレフィックスすると、フィールドが設定され、ショートカットとして`defer`が有効になります。

  • **<value>** は、フィールドを追加または設定する場合のヘッダーフィールド値です。

  • **<find>** は、検索する部分文字列または正規表現です。

  • **<replace>** は置換値です。検索と置換を実行する場合は必須です。

  • **defer** は、レスポンスがクライアントに書き出されるまでヘッダー操作を強制的に遅延させます。これは、`-`でヘッダーフィールドが削除されている場合、`?`でデフォルト値を設定している場合、または`>`プレフィックスを使用している場合に自動的に有効になります。

複数のヘッダー操作を行う場合は、ブロックを開き、同じ方法で1行ごとに1つの操作を指定できます。

`?`プレフィックスを使用してデフォルトのヘッダー値を設定する場合は、これを独自の`header`ディレクティブに分けることをお勧めします。内部的には、`?`を使用すると、ディレクティブのハンドラー全体に適用されるレスポンスマッチャーが構成され、フィールドがまだ設定されていない場合にのみヘッダー操作が適用されます。たとえば、同じディレクティブで、`-Hidden`と`?Foo default`という2つの操作がある場合、`Hidden`ヘッダーは`Foo`が空の場合に*のみ*削除されます。これは通常、意図した効果ではありません。

すべてのリクエストにカスタムヘッダーフィールドを設定する

header Custom-Header "My value"

"Hidden"ヘッダーフィールドを削除する

header -Hidden

Locationヘッダーの`http://`を`https://`に置換する

header Location http:// https://

すべてのページにセキュリティヘッダーとプライバシーヘッダーを設定する:(**警告:** 意味を理解している場合にのみ使用してください!)

header {
	# disable FLoC tracking
	Permissions-Policy interest-cohort=()

	# enable HSTS
	Strict-Transport-Security max-age=31536000;

	# disable clients from sniffing the media type
	X-Content-Type-Options nosniff

	# clickjacking protection
	X-Frame-Options DENY
}

相互に排他的であることを意図した複数のヘッダーディレクティブ

route {
	header           Cache-Control max-age=3600
	header /static/* Cache-Control max-age=31536000
}

アップストリームで定義されていない場合にデフォルトのキャッシュ有効期限を設定する

header ?Cache-Control "max-age=3600"
reverse_proxy upstream:443

`/no-cache`で始まるパスに対してプロキシアップストリームが設定したキャッシュの有効期限を上書きするには、プロキシがヘッダーを書き込んだ*後*にヘッダーが設定されるように`defer`を有効にする必要があります

header /no-cache* >Cache-Control nocache
reverse_proxy upstream:443

`Set-Cookie`ヘッダーの遅延更新を実行して`SameSite=None`を追加するには、正規表現キャプチャを使用して既存の値を取得し、`$1`で追加のオプションを追加して先頭に再挿入します

header >Set-Cookie (.*) "$1; SameSite=None;"