前言
博主博客中的圖片,使用的是自己搭建的圖牀(在騰訊雲+python+自己的域名),由於之前採用的是 http,會被瀏覽器當成不安全鏈接,把圖片給屏蔽。因此,博主着手將其無縫替換爲 https,本文是操作細節。
1 申請證書
在騰訊雲平臺,提供 1 年的免費證書:
https://console.cloud.tencent.com/ssl
上面是我申請的兩個證書。
注: 因爲是一年免費的證書,每個二級域名都要單獨申請一個,我第一次只申請一個一級域名,發現不行!!!
2 Nginx 服務器 SSL 證書安裝部署
我們上面申請的是國際加密標準的 SSL 證書,並且準備部署在 Nginx 服務器上,因此參考:https://cloud.tencent.com/document/product/400/35244
2.1、準備 Nginx 環境
博主服務器環境是 ubuntu,其默認的 nginx 版本太低,因此需要手動編譯安裝:
1)完全卸載原來 nginx:sudo apt-get auto-remove nginx
2)下載,編譯,安裝:
wget http://nginx.org/download/nginx-1.18.0.tar.gz
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
# 安裝 zlib, openssl (編譯工具,如果沒有也要安裝)
sudo apt-get install zlib1g-dev
sudo apt-get install openssl
sudo apt-get install libssl-dev
# 安裝PCRE
tar zxvf pcre-8.35.tar.gz
cd pcre-8.35
sudo ./configure
sudo make
sudo make install
# 安裝nginx
tar zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0.tar.gz
sudo ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
sudo make
sudo make install
注意:
- 需要完全刪除老的 Nginx
- nginx 編譯選項一定要帶
--with-http_ssl_module
,否則無法使用 ssl (運行./sbin/nginx -t
時會報錯) - ./configure: error: SSL modules require the OpenSSL library. 需要安裝 libssl-dev (ubuntu 編譯nginx時出錯解決辦法)
3)生成 nginx 軟鏈接
安裝之後,在 /usr/bin 中建立一個 nginx軟鏈接:
ln -s /usr/local/nginx/sbin/nginx nginx
2.2 證書部署
參考:https://cloud.tencent.com/document/product/400/35244
1)在 SSL 證書管理控制檯 中選擇您需要安裝的證書並單擊下載
2)通過 scp 等方法,將下載的壓縮包送到遠程服務器,解壓後:
➜ tuchuang.beautifulzzzz.com_nginx tree
.
├── tuchuang.beautifulzzzz.com_bundle.crt 證書文件
├── tuchuang.beautifulzzzz.com_bundle.pem 證書文件(可忽略該文件)
├── tuchuang.beautifulzzzz.com.csr CSR 文件
└── tuchuang.beautifulzzzz.com.key 私鑰文件
3)將 crt 和 key 文件複製到 nginx config 目錄下:
cd /usr/local/nginx/conf
mv ~/Download/tuchuang.beautifulzzzz.com_nginx/tuchuang.beautifulzzzz.com.key ./
mv ~/Download/tuchuang.beautifulzzzz.com_nginx/tuchuang.beautifulzzzz.com_bundle.crt ./
2.3 Nginx 配置
此操作可通過執行 vim /usr/local/nginx/conf/nginx.conf
命令行編輯該文件:
server {
#SSL 訪問端口號爲 3000
listen 3000 ssl;
#填寫綁定證書的域名
server_name tuchuang.beautifulzzzz.com;
#證書文件名稱
ssl_certificate tuchuang.beautifulzzzz.com_bundle.crt;
#私鑰文件名稱
ssl_certificate_key tuchuang.beautifulzzzz.com.key;
ssl_session_timeout 5m;
#請按照以下協議配置
ssl_protocols TLSv1.2 TLSv1.3;
#請按照以下套件配置,配置加密套件,寫法遵循 openssl 標準。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
# nginx 端口重映射,可以這樣寫
# 當訪問: https://tuchuang.beautifulzzzz.com:3000 時,會映射到 http://127.0.0.1:8000
location / {
proxy_pass http://127.0.0.1:8000;
}
#location / { <-- 如果你不需要藉助 nginx 端口重映射,可以這樣寫
# #網站主頁路徑。此路徑僅供參考,具體請您按照實際目錄操作。
# #例如,您的網站運行目錄在/etc/www下,則填寫/etc/www。
# root html;
# index index.html index.htm;
#}
}
因爲,我之前圖牀圖片鏈接都是 http,我不想改變原來的鏈接,可以通過 nginx 重映射實現:
server {
listen 3000;
#填寫綁定證書的域名
server_name tuchuang.beautifulzzzz.com;
rewrite ^(.*)$ https://$host$1 permanent;
#把http的域名請求轉成https
#return 301 https://$host$request_uri;
}
這樣,每次瀏覽器訪問 http://tuchuang.beautifulzzzz.com:3000
,會被自動轉到 https://tuchuang.beautifulzzzz.com:3000
,然後在藉助上面配置,可以最終轉到 http://127.0.0.1:8000
。
最後,可以在 Nginx 根目錄下,通過執行以下命令驗證配置文件是否有問題:
./sbin/nginx -t
沒問題後,運行下列命令重啓 nginx 即可(如果報 nginx.pid 錯,參考鏈接 8):
nginx -s reload
注意: 好像 markdown 和 curl 等不能自動將 http 轉換爲 https。
3 最後
發佈這個博文時,如果大家能在瀏覽器中不報警告情況下看到圖片,說明我們上面一頓操作成功了!
其實,還有個小工作要做 —— 就是更新圖片上傳的腳本:
➜ Pictures cat run.sh
#!/bin/bash
ret=`curl https://tuchuang.beautifulzzzz.com:3000/api/v1/upimg -F "file=@$1" -H "token:密碼" -v`
cnt=1
if [ ! -f "tuchuang.log" ]; then
echo $cnt > tuchuang.log
else
cnt=`cat tuchuang.log`
cnt=$((cnt+1))
echo $cnt > tuchuang.log
fi
echo ""
echo $ret | jq .
param=`echo $ret | jq .data.path | sed 's:\"::g'`
echo [p$cnt]:https://tuchuang.beautifulzzzz.com:3000/?path=$param
參考鏈接
[1]. 如何選擇 SSL 證書安裝部署類型?
[2]. Nginx 服務器 SSL 證書安裝部署(RSA)
[3]. 服務器如何開啓443端口?-> 添加安全組規則
[4]. ssl證書是一個域名一個證書嗎 ?
[5]. CentOS7上部署Nginx實現https和http重定向https
[6]. ubuntu18.04安裝Nginx1.18.0 - 安裝記錄
[7]. nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module
[8]. 解決Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid" failed(2:No such file or directory)
[9]. 讓你的網站免費支持 HTTPS 及 Nginx 平滑升級
[10]. ubuntu 編譯nginx時出錯解決辦法
[11]. 自建圖牀服務器
: 陸續更新中...