梅花雀莊

何震邦的個人網站,通常寫電腦和橋牌相關的文章,未來可能會寫關於日本麻將的東西

在 nginx 上調整所有文本的編碼

全站的文字檔都使用相同編碼是很常見的。尤其是 UTF-8 儼然是今日的實作標準。然而,nginx 預設的 charset_types 設定不包括 text/css,遑論其他非純文本。(例如 text/markdown

預設的 charset_types 應該要是 text/* 才對,因為為了向後相容,許多 text/* 格式預設解讀為 ASCII (us-ascii)。就連 text/xml 也是如此,即使檔案中有 BOMXML 宣告也徒勞無功。所以,現在我們應該用 application/xml 來傳遞 XML。

然而 charset_types 設定只檢查完全符合的 MIME,不然就必須用 * 匹配所有類型。幸好 nginx 有可以匹配正則表達式的 map,而且 charset_types 也接受變數。

map $sent_http_content_type $charset {
    ~^text/   utf-8;
}

charset       $charset;
charset_types *;

這樣的設定會讓 nginx 指定所有文本為 UTF-8,例如 text/css; charset=utf-8

作者:何震邦

我叫何震邦,畢業於臺北醫學大學醫學系。我也叫 Chen-Pang He。我的專長是微積分和數值線性代數,現在專職軟體工程師。我也是橋牌裁判。