Nginx charset ディレクティブが Content-Type ヘッダーの変更に失敗する

Nginx charset ディレクティブが Content-Type ヘッダーの変更に失敗する

設定ファイルの http または server ブロック内の「charset utf-8」ディレクティブにより、nginx は応答のヘッダーに「Content-Type: text/html」だけでなく「Content-Type: text/html; charset=utf-8」も含めるようになるはずです。

ただし、そのディレクティブを http ブロックと該当するサーバー ブロックの両方に追加しましたが、「Content-Type」ディレクティブは変更されていません。

講じられる予防措置には、次のものが含まれます。1. 構成を変更するたびに nginx をリロードまたは再起動する。2. その前に「charset_types text/html text/plain;」ディレクティブを含める。3. 無関係な構成変更を行い、期待どおりの効果があることを確認する。

ここでの関連する議論と nginx のドキュメントを確認しましたが、説明は見つかりませんでした。

答え1

charset utf-8;

server{}ブロックで必要なのはこれだけです。nginxのドキュメントによると、

http://nginx.org/en/docs/http/ngx_http_charset_module.html#source_charset

これを http、サーバー、または場所のコンテキストに配置できます。

答え2

ご返信ありがとうございます。301 レスポンスのヘッダーを見ていたことにようやく気付きました。末尾にスラッシュのない URL は、末尾にスラッシュがある同じ URL にリダイレクトされます。301 レスポンスのコンテンツ タイプは「text/html」です。しかし、リダイレクト後の次のレスポンスのコンテンツ タイプは「text/html; charset=utf-8」です。301 レスポンスで charset パラメータを宣言することがどれほど役立つのかはわかりませんが、コンテンツ タイプとして text/html を宣言しているので、nginx 構成で http ブロックに charset を設定している場合、301 レスポンスでも charset を期待すべきではないでしょうか。nginx のバージョンは 1.10.3 (Ubuntu) です。

関連情報