本日偶爾會見了一個線上應(yīng)用不存在的url,應(yīng)用報錯,呈現(xiàn)了亂碼。
亂碼是從nginx轉(zhuǎn)發(fā)的tomcat報出來的。tomcat默認處理懲罰HTML是以ISO-8859-1處理懲罰的,所以就發(fā)生了亂碼。
辦理這個error_page的途徑我實驗了兩種要領(lǐng):
1、讓tomcat返回正常的非亂碼的error_page
tomcat的錯誤頁是在項目標web.xml中設(shè)置的,荷蘭服務(wù)器 英國主機租用,可是除了這個之外,別無其它編碼設(shè)置。在網(wǎng)上搜索了有人提現(xiàn)將.html這種頁面也交由jsp servlet處理懲罰就好,我認為這種方法欠好,所以直接沒實驗。
我設(shè)置的web.xml如下:
<error-page>
<error-code>500</error-code>
<location>/error.html</location>
</error-page>
那么首先想到的就是把error.html頁的返轉(zhuǎn)頭改掉:
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
可是改后,不幸的是照舊不可!
tomcat照舊把它處理懲罰成ISO-8859-1了。杯具!
2、第二種途徑是不管tomcat返回的錯誤頁,直接利用nginx的錯誤頁
這里要留意一件事就是必然要設(shè)置nginx這個選項:proxy_intercept_errors on;
這個選項默認在nginx是off的。
所以這時候你設(shè)置的所有error_page錯誤頁都不會生效。為此我查了良久才知道是這個原因。
我的設(shè)置:
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080;
proxy_intercept_errors on;
}