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