天天看點

「python」「nginx」「https」 Nginx 伺服器 SSL 證書安裝部署

作者:程式那點事

前言

部落客部落格中的圖檔,使用的是自己搭建的圖床(在騰訊雲+python+自己的域名),由于之前采用的是 http,會被浏覽器當成不安全連結,把圖檔給屏蔽。是以,部落客着手将其無縫替換為 https,本文是操作細節。

1 申請證書

在騰訊雲平台,提供 1 年的免費證書:

https://console.cloud.tencent.com/ssl

「python」「nginx」「https」 Nginx 伺服器 SSL 證書安裝部署

上面是我申請的兩個證書。

注: 因為是一年免費的證書,每個二級域名都要單獨申請一個,我第一次隻申請一個一級域名,發現不行!!!

「python」「nginx」「https」 Nginx 伺服器 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           

來源:https://www.cnblogs.com/zjutlitao/p/15972056.html

繼續閱讀