一次環境變量出錯導致的tomcat數據亂碼事件
1.1 事件起因
由於業務的調整,我們需要將在A服務器上的后台系統遷移到B服務器上的后台,我們選擇在下班后進行遷移,因為那個時間點,后台系統已經幾乎沒有人在使用了。我將原來的tomcat 暫停后,壓縮打包后上傳在到B的服務器,然后我在B服務器上啟動該項目,項目是正常啟動了,整個訪問也是沒有問題,但是后台返回的數據是亂碼的。 注意,我整個操作是在我們的堡壘機上面進行的,就是因為通過堡壘機登錄的,所以導致后面出現問題。
1.3 事件的錯誤
排查思路,tomcat啟動日志中是否有異常,環境變量是否有異常?
在查看日志中發現是沒有異常的,然后我通過xshell 去查看環境變量也是沒有異常的(我為什么不直接在堡壘機上查看)。
最后在多次嘗試中,發現通過堡壘機登錄B服務器時的環境變量中的 LANG 變量為空 ,正常這個地方是有值的,所以問題就是這個了。
1.4 事件的解決辦法
解決辦法1(臨時):export LANG="en_US.UTF-8"
解決辦法2(永久): 編輯登錄用戶的家目錄的 .bashrc 文件,在底部加上
export LANG="en_US.UTF-8"
```
這樣我們每次登錄就會自動設置導入該值了。
### 1.5 問題引申
我們在tomcat 的server.xml 文件里面有個參數為 URIEncoding ,這個值默認為 UTF-8 的,但是如果我們在org.apache.catalina.STRICT_SERVLET_COMPLIANCE 將system property 設置為true,那么url編碼就使用ISO-8859-1.可能導致的url亂碼。