域名申請下來之後是可以訪問了,但是如果需要用到小程序上面的話,還是需要支持https調用的。但是想着這還不難嘛。直接上ssl證書就好了。
那麼問題就來了,白嫖一時爽。。。。。。
想白嫖SSL證書,單域名證書不是白嫖一次就行了,如果有多個服務,就要白嫖多次了。
剛開始申請完證書之後,直接上了www.yuming.com
然後就好了。
但是後面用到幾個二級域名,也要支持https,剛開始我天真的以爲一級域名的證書,應該也會支持二級域名的訪問的。就這樣上去就是一頓配置,結果gg。。。。。
Chrome瀏覽器直接就提示檢測到abc.yuming.com
使用的是www.yuming.com
的證書。。。。
這就很尷尬了,不好使了。。。。
然後我對着搜索引擎就是一頓搜,結果就是沒有結果,改來改去還是不行。。。。。
然後突然同事提到一句,你看下證書是不是單域名的證書,如果是單域名的證書的話,應該是不支持二級域名的。這讓我突然想到剛開始的錯誤提示,就是明顯的告訴你,當前域名使用的是另一個域名的證書。而我剛開始是真的沒有意識到這一點,導致折騰了一倆小時。。。
廢話嘮完了,那就直接上配置就好了:
我用的是阿里雲的服務器,當然也是購(bai)買(piao)了阿里雲的免費的證書。
首先申請域名的證書前,需要保證該域名需要能ping通,否則會審覈失敗。
那麼怎麼購買免費的證書呢?
登錄阿里雲控制檯,在左側菜單欄產品與服務那裏,搜證書
,然後直接進入SSL證書。
這裏可以看到購買和申請的證書。
沒有證書的,就可以點擊購買證書了:
白嫖黨的福利,財大氣粗的話,可以買多域名的,這樣操作簡單,一勞永逸。
勾選服務協議,然後支付0元。
可以看到有了一個未簽發的證書,這時需要先申請,這就需要用到了域名了。
輸入域名,申請人信息,下一步
下一步有個驗證,驗證通過之後,提交審覈就好了。等十幾二十秒後刷新,就可以看到已經
最後下載就好了,我這裏使用的是nginx,所以下載對應的就好了,如果是traefik的話,需要下載Apache的證書。
解壓之後,就會出現這兩個玩意,那麼直接上傳到服務器上。
我這裏上傳到nginx安裝目錄下的cert文件夾下了,cert是新建的文件夾。
然後就是修改conf文件了。
修改前,可能是這樣的:
upstream pms{
server 127.0.0.1:50000 weight=1;
}
server {
listen 80;
server_name pms.yuming.com;
location / {
client_body_buffer_size 50m;
proxy_pass http://pms;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
修改後:
server {
listen 80;
server_name pms.yuming.com;
#rewrite ^(.*)$ https://$host$1 permanent;
location / {
client_body_buffer_size 50m;
proxy_pass http://pms;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
server {
listen 443 ssl;
server_name pms.yuming.com;
ssl_certificate "/alidata/server/cert/pms.yuming.com.pem";
ssl_certificate_key "/alidata/server/cert/pms.yuming.com.key";
location / {
proxy_pass http://pms;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_redirect default;
}
}
其實就是加了一個監聽443的端口,server_name 仍然同80端口的server_name,可以看到上面80端口哪裏註釋掉一行rewrite
,註釋和不註釋的區別就是,添加證書後是否 還支持http調用。
如果只允許https調用,就打開註釋,這樣http的請求就會直接轉發到https上,也就是說不再支持http調用,如果使用http請求的話,服務端收到的請求將會丟失請求的body中的參數。
我還見到有將上面連個server寫一塊的,同時監聽80端口和443端口,但是我沒有嘗試這種,其中用if判斷請求
listen 80;
listen 443;
if($server_port !~ 443){
return 307 https://$server_name$request_uri;
}
接着就是重啓測試nginx的配置文件是否正常了。
我這裏使用的是自定義的配置文件:
/alidata/server/nginx-1.4.4/sbin/nginx -t -c /alidata/server/nginx/conf/nginx.conf
其中-t是測試,-c是啓動。如果提示successful,則證明配置文件沒問題。
如果正常,則重新加載配置文件即可。
/alidata/server/nginx-1.4.4/sbin/nginx -s reload -c /alidata/server/nginx/conf/nginx.conf