freenginxでAgeヘッダーの扱いが改善されました
はじめに
nginxとそのフォークのfreenginxはAgeレスポンスヘッダーの値を一切更新しないという挙動になっていましたが、freenginxではそれが改善されたという話です。
ただし、コミットはされましたがリリースはまだです。おそらく次のリリースに含まれると思います。
過去
2012年に#146 (Age header for proxy_http_version 1.1) – nginxというイシューは作られていましたが、対応されないままになっていました。
今回の経緯
- 2024-06-14 nginx-develメーリングリストにパッチを投げてみました。
- が、出来が悪かったようで[PATCH 0 of 3] Update Age response header correctly、コメントがつきませんでした。
- 2024-06-20 freenginx-develメーリングリストにパッチを投げてみました。
- [PATCH 0 of 3] [nginx] cache: Update Age response header correctly
- Maxim Douninさんから詳細なコメントを頂いて、何度かパッチを更新して送りました。
- 2024-07-18 Maixum Dounin さんから、私のパッチより格段に良いパッチが提案されました。
変更内容
本体のコミットは以下の2つです(公式ミラー https://github.com/freenginx/nginx 内のリンクを貼っています)。
- Upstream: using the “Age” header when caching responses. · freenginx/nginx@cc71639
- upstreamからのレスポンスにAgeヘッダがついていてかつCache-Control: max-ageまたはs-maxageの値を採用する場合、キャッシュ有効期限の絶対日時を算出する際にAgeの値の分を引くという変更です。
- Upstream: $upstream_cache_age variable. · freenginx/nginx@70ee831
add_header Age $upstream_cache_age;
を指定することで、キャッシュ作成後に別のリクエストを受けてキャッシュを配信する際にAgeを作成時の値+滞留時間に設定するという変更です。- なお、議論の結果、RFC 9111: HTTP Cachingの4.2.3. Calculating Ageの
corrected_initial_age
はupstreamのAgeレスポンスヘッダー(age_value
)をそのまま使用するという仕様となっています。
テストのコミットは以下の1つです(公式ミラー https://github.com/freenginx/nginx-tests 内のリンクを貼っています)。