如何在 NGINX 中启用正确的字符集 HTTP 标头

pvo*_*orb 45 http nginx charset

在 NGINX 中启用正确的字符集标头的正确方法是什么?

我正在使用 Google Page Speed 分析我的网站。它说我应该在 HTTP 标头中指定 HTML 文件的字符集。这样做的正确方法是什么?

我已经尝试charset utf-8;server {}我的 NGINX 配置文件的声明中进行设置,但没有任何效果。

我的服务器响应以下标头:

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
Run Code Online (Sandbox Code Playgroud)

谢谢你。

Vla*_*kov 44

添加charset utf-8;几乎是您需要做的一切。确定更改配置文件后没有忘记重新加载nginx吗?

除了在撰写本文时,curl -I http://vorb.de/返回以下结果:

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
Run Code Online (Sandbox Code Playgroud)

所以现在一切正常。


小智 26

如果您没有设置您想要 UTF-8 的“charset_types”指令,则设置字符集可能不起作用。

例如:当您设置“charset utf-8;”时,所有 HTML 都会反映,但不会反映 JSON 文件,因为默认情况下它们并未在“charset_types”上设置。

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


小智 7

这就是您所需要的。

charset utf-8;
source_charset utf-8;
Run Code Online (Sandbox Code Playgroud)

除非我两者都拥有,否则它对我不起作用。

  • “……不要编辑我答案中的语法,这样你就可以得到分数或其他东西……”我编辑你的语法不是为了“得到分数或其他东西”。我编辑了您的语法以改进您的答案。我没有出于任何原因更改您答案的内容,只是为了改进非常基本的格式和文本。如果你[实际查看编辑](https://serverfault.com/posts/975289/revisions),你会发现我几乎没有改变任何东西。但如果您不喜欢它,您可以随意回滚编辑。Stack Exchange 站点允许社区成员编辑任何问题/答案以对其进行改进。而且您随时可以将其回滚。 (2认同)

blu*_*yed 6

您可能还需要调整charset_types设置以包括要为其设置字符集设置的 mime 类型(例如,默认情况下不包括文本/日历)。

对于它的价值,我认为text/*应该默认处理 - 但你不能在这里使用它(与 Apache IIRC 一样)。

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