Como habilitar o cabeçalho HTTP do conjunto de caracteres correto no NGINX

39

Qual é a maneira correta de ativar os cabeçalhos de charset corretos no NGINX?

Estou analisando meu site com o Google Page Speed. Ele diz que eu deveria especificar o conjunto de arquivos HTML nos cabeçalhos HTTP. Qual é a maneira certa de fazer isso?

Eu já tentei definir charset utf-8;na server {}declaração do meu arquivo de configuração NGINX, mas ele não tem nenhum efeito.

Meu servidor responde com o seguinte cabeçalho:

Connection: keep-alive
Date: Fri, 16 Sep 2011 12:43:24 GMT
Last-Modified: Fri, 02 Sep 2011 15:13:17 GMT
Server: nginx/0.7.67

Obrigado.

pvorb
fonte
O link não funciona mais.
Pothi Kalimuthu 15/07

Respostas:

38

Adicionar charset utf-8;é praticamente tudo o que você precisa fazer. Tem certeza de que não se esqueceu de recarregar o nginx depois de alterar o arquivo de configuração?

Além disso, no momento da escrita, curl -I http://vorb.de/ retorna o seguinte resultado:

HTTP/1.1 200 OK
Server: nginx/0.7.67
Date: Fri, 16 Sep 2011 13:20:03 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 1705
Last-Modified: Fri, 02 Sep 2011 15:13:17 GMT
Connection: keep-alive
Vary: Accept-Encoding
Accept-Ranges: bytes

Então, tudo parece bem agora.

Vladimir Blaskov
fonte
22

A configuração do charset pode não funcionar se você não definir a diretiva "charset_types" que deseja UTF-8.

Por exemplo: Quando você define "charset utf-8;", todo o HTML reflete, mas não os arquivos JSON, porque eles não são definidos por padrão em "charset_types".

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

Shun wee
fonte
5

Pode ser necessário também ajustar a charset_typesconfiguração para incluir o tipo de mímica para o qual você deseja definir a configuração do conjunto de caracteres (por exemplo, texto / calendário não é incluído lá por padrão).

Pelo que vale a pena, acho que text/*deve ser tratado por padrão - mas você não pode usá-lo aqui (como no Apache IIRC).

Consulte http://nginx.org/en/docs/http/ngx_http_charset_module.html#charset_types

azulado
fonte
2
    charset utf-8;
    source_charset utf-8;

É o que você precisa. Não vai funcionar para mim, a menos que eu tenha os dois.

Escândalo Leroy
fonte