Я понимаю, что директива «charset utf-8» в блоке http или server файла конфигурации должна заставить nginx включать «Content-Type: text/html; charset=utf-8» в заголовки ответа, а не только «Content-Type: text/html».
Однако я добавил эту директиву как в блок 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 устанавливает charset в блоке http, не должны ли мы ожидать charset и в ответе 301? Версия nginx — 1.10.3 (Ubuntu).