這次,業務部門要切換業務,發現https業務切換到新環境以後,一直報400的錯誤。
nginx版本用的是nginx-1.7.12
openssl版本用 的是openssl-1.0.1d
失敗的ssl服務器 A 在線的SSL服務器 B
當時出錯的現象是 日誌
|[19/Jan/2016:13:26:34 +0800]|zhao.gyyx.cn|GyET /oauth2/stat.aspx HTTP/1.1|0|0.006|"400"| |[19/Jan/2016:13:26:37 +0800]|zhao.gyyx.cn|G\x8EET /favicon.ico HTTP/1.1|0|0.006|"400"|16
發現get方法被改寫成亂碼了。然後報400錯誤。
但是,令人奇怪的是:
1,找一臺跟ssl服務器互通的linux機器,進行綁定hosts進行測試。
用curl直接抓取 就是200的返回碼,
但是用 curl -x IP:port 就是400的錯誤失敗。
2.在windows上進行綁定hosts測試,用瀏覽器打開頁面 也是400錯誤
查看nginx配置文件以及nginx的安裝編譯參數,確定ssl服務器 A B兩臺服務器的nginx.conf配置一樣。編譯參數一樣。除了ssl域名其他虛擬主機訪問都沒有問題。
開始頭疼
各種測試,重新安裝。
最後結果是 nginx編譯安裝之前把openssl make install了。
其實正常的nginx與openssl的整合過程應該是這樣的。
下載openssl的源碼包,然後解壓到指定目錄,不用編譯安裝
然後把nginx進行編譯安裝的時候,--with-openssl=/usr/local/src/openssl-1.0.1q直接指向源碼包就可以了。在nginx./configure;make;make install;的時候,就會直接把openssl進行同步的編譯了
nginx編譯安裝以後,進行ssl的配置,最後把nginx進行restart (注:reload有可能不成功)
然後再進行測試 就成功了。