不花錢幾分鐘讓你的站點也支援https

kason發表於2023-02-14

前言

現在,免費SSL證書已經很普遍了,但是,申請和配置SSL證書仍然是一件較為繁瑣的事,修改web服務配置在所難免,且不同的web服務配置方法不一樣,不具備通用性。本文介紹一種通用的快速配置方法,web服務只需要做很少的改動(只需要修改埠號即可),支援任何web服務,只需要滿足以下條件:

  • 你的伺服器能使用podman或者docker
  • 你的站點能透過公網訪問

步驟

這裡以podman為例(docker使用者只需要把podman命令替換為docker即可)

  1. 使用終端登入你的伺服器

  2. 執行podman --help命令檢查是否已經安裝podman,如果提示命令找不到,則使用下面命令安裝

    Debian/Ubuntu 20.10+ 系統:

    sudo apt-get -y install podman
    

    Centos系統:

    sudo yum -y install podman
    

    其他系統可參照podman文件自行安裝:https://podman.io/getting-started/installation

  3. 如果原web服務的埠號是80,將其改成任意一個非80埠,保證80埠不被佔用,這裡假設修改後的埠號為8080,伺服器內網IP為192.168.1.100

  4. 執行如下命令:

    注意: 下面出現的www.example.com替換為你的真實域名。

        mkdir vhosts
        mkdir data
        touch vhosts/www.example.com.toml
    

    編輯vhosts/www.example.com.toml檔案,輸入如下內容,並儲存。

    upstream = ["192.168.1.100:8080"]
    
  5. 執行以下命令:

    注意:<YOUR_EMAIL>替換為你的真實郵箱

    需要使用sudo執行的原因是繫結80埠需要root許可權,如果你的伺服器沒有這個限制,可以把sudo去掉,以普通使用者許可權執行即可。

    podman run -d --name nginx-proxy \
       --restart always \
       --env AUTO_SSL=on \
       --env AUTO_SSL_EMAIL=<YOUR_EMAIL> \
       -v "$PWD/vhosts":/etc/nginx-proxy/vhosts:ro \
       -v "$PWD/data":/var/nginx-proxy \
       -p 80:80 \
       -p 443:443 \
       kasonyang/nginx-proxy:latest
    

完成以上步驟後,等待一兩分鐘即可,輸入https://你的域名檢視是否可以正常訪問,如果不行,可以使用podman logs nginx-proxy 檢視一下是否有報錯。

SSL證書時效

申請的SSL證書有效期3個月,每天會自動檢查,到期前會自動更新,更新不會中斷服務。

後續增加域名

後續如果有更多域名需要啟用https,就很簡單了。參照步驟4,為新域名在vhosts目錄下建立一個對應的toml配置檔案即可。新增檔案後,80埠(http)立即可用,443埠(https)需要等待幾分鐘才能完成生效(申請證書需要時間)。

原始碼

本文使用的docker映象開源,獲取原始碼可以戳這個連結: https://github.com/kasonyang/docker-nginx-proxy

相關文章