50

What is the right way to enable correct charset headers in NGINX?

I'm analyzing my website with Google Page Speed. It says that I should specify the charset of HTML files in HTTP-headers. What is the right way to do this?

I already tried to set charset utf-8; in the server {} declaration of my NGINX configuration file, but it hasn't got any effect.

My server responds with the following header:

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

Thank you.

pvorb
  • 980
  • 3
  • 10
  • 15
  • The link doesn't work anymore. – Pothi Kalimuthu Jul 15 '19 at 10:46
  • Link to documentation of the *SpecifyCharsetEarly* rule: https://code.google.com/archive/p/page-speed/wikis/SpecifyCharsetEarly.wiki ([archived](https://web.archive.org/web/20170102084035/https://code.google.com/archive/p/page-speed/wikis/SpecifyCharsetEarly.wiki)) – Robin A. Meade Nov 08 '21 at 18:09

4 Answers4

46

Adding charset utf-8; is pretty much everything you need to do. Are sure that you didn't forget to reload nginx after you changed the configuration file?

Besides at the moment of writing, curl -I http://vorb.de/ returns the following result:

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

So everything looks ok now.

Vladimir Blaskov
  • 6,073
  • 1
  • 26
  • 22
29

Setting the charset might not work if you do not set "charset_types" directive which you want UTF-8.

For example: When you set "charset utf-8;", all HTML will reflect, but not JSON files, because they are not set by default on "charset_types".

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

Shun wee
  • 291
  • 3
  • 3
7
    charset utf-8;
    source_charset utf-8;

Is what you need. It won't work for me unless I have both.

Leroy Scandal
  • 71
  • 1
  • 1
6

You might have to also adjust the charset_types setting to include the mime type you want to set the charset setting for (e.g. text/calendar is not included there by default).

For what it's worth I think that text/* should be handled by default - but you cannot use it here (as with Apache IIRC).

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

blueyed
  • 723
  • 8
  • 13