今天偶然訪問了一個線上應用不存在的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; }