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