一、問題由來
最近在做一個小程序的后台,自己去微信官網上查看了相關的規定,小程序正式發布時,要求比較嚴格,必須是使用https+域名訪問,自己在
阿里雲購買了一個域名,可是沒有備案。SSL證書去阿里雲購買了一個免費的證書,想先把環境搭起來,讓測試環境最接近真實環境來進行開發。
一切准備就緒,SSL證書已經配置完成,自己使用http+域名+端口進行訪問也沒問題,然后開始測試。立馬出現問題,報錯信息如下:
https://www.xxxx.com:10003/applets/gift/list net::ERR_SSL_PROTOCOL_ERRO
二、問題分析
nginx中關於https服務的配置如下:
server {
listen 443 ssl;
server_name www.xxx.com;
ssl_certificate /home/software/nginx_1_16/cert/6131892_xxx.com.pem;
ssl_certificate_key /home/software/nginx_1_16/cert/6131892_www.xxx.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#location /applets {
# proxy_pass http://xxx:23458;
#}
location / {
root html;
index index.html index.htm;
}
}
自己也去看了一下nginx的日志,發現根本沒有打印日志信息,這就說明一個問題,請求根本沒有到達nginx服務器。
三、解決方案
對於出現的這個情況,自己也嘗試着想辦法解決,一個一個的進行嘗試。
.a.假設:是不是由於兩個證書的名稱不對,導致沒有正常解析?辦法:修改證書的名稱,讓其不帶任何特殊符號,比如小數點,不使用數字等等。
ssl_certificate /home/source/cert/yilang.pem;
ssl_certificate_key /home/source/cert/yilang.key;
測試配置文件是否正確,重啟,測試結果沒有效果。
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
.b.修改web訪問端口號為80默認端口,SSL證書的端口為443已經打開,測試,重啟,沒有生效。
參考如下文章
https://blog.csdn.net/ws_zll/article/details/8486033
.3.修改域名配置,去除www前綴。因為看到阿里雲中域名解析顯示的是xxx.com,重啟nginx,沒有效果,仍然報錯。
.4.仔細分析下面這幾種情況都可以正常訪問,
可以訪問:
https://120.xxx.xxx.21/applets/gift/list
可以訪問:
http://120.xxx.xxx.21:10003/applets/gift/list
可以訪問
http://www.xxx.com:10003/applets/gift/list
不使用域名的時候就可以使用https進行訪問,這讓我很是疑惑,難道是域名有問題?可是使用http訪問的時候,添加
域名也沒問題。最后去找了一個高手咨詢了一下,果然如此,就是這個原因導致的。
總結:
阿里雲購買的域名,還沒有進行備案。使用http+域名訪問,沒問題;使用https+域名,會訪問不到,報如圖所示的錯誤。
所以在國內購買域名后一定要進行備案,雖然我知道這非常麻煩,會填寫各種詳細的個人信息,比如電話、身份證號碼,
還需要本人手持身份證拍照這種操作。極其麻煩,可是么得法,為了項目能夠正常訪問,還是進行去備案比較好。