直接使用 Cloudflare 管理 SSL 憑證是完全免費的。
零元方案的內容
對於一般使用者,Cloudflare 的 Free 方案 就已經非常夠用。
- Universal SSL(通用憑證):免費。當你把小雲朵(Proxy)打開時,Cloudflare 會自動幫你的網域和第一層子網域(如
*.max-everyday.com)簽發憑證。 - Origin CA 憑證:免費。你可以從 Cloudflare 後台下載一張有效期長達 15 年的憑證裝在你的 Ubuntu Server 上,讓 Cloudflare 到你主機這一段路也是加密的。
- 自動續約:免費。Cloudflare 會自己處理憑證更新,你完全不需要跑
certbot指令。
什麼時候需要花錢?
除非你有非常特殊的技術需求,否則通常碰不到付費項目:
- 進階憑證管理 (ACM):每月約 10 美元。如果你需要更深層的子網域(例如
a.b.dictionary.max-everyday.com),或是想要自訂憑證的有效期、選擇特定的簽發機構,才需要這個。 - 自訂憑證上傳:需要 Business 方案(每月 200 美元)。如果你一定要把你在外面買的昂貴憑證上傳到 Cloudflare 使用才要買這個。
簡單總結
你現在的情況,只要把網域交給 Cloudflare 代管,並在 DNS 頁面把該子網域的 Proxy 狀態(橘色小雲朵)點亮,SSL 就會自動生效,且一毛錢都不用花。
在 Cloudflare 官網後台的 SSL/TLS 選項中,找到「Origin Server」頁面,點擊「Create Certificate」。直接點選建立後,你會得到兩段文字:一個是 Certificate(憑證),另一個是 Private key(私密金鑰)。
準備憑證檔案
請在你的 Ubuntu Server 上建立兩個檔案,把網頁上的內容分別貼進去。
- 新建
/etc/ssl/certs/cloudflare.pem,貼入 Certificate 內容。 - 新建
/etc/ssl/private/cloudflare.key,貼入 Private key 內容。
請務必保護好 key 檔案,不要讓其他人讀取。
修改 Apache 設定
你需要修改原有的設定檔,讓它監聽 443 埠。你可以參考下面的寫法。
<VirtualHost *:443>
ServerAlias dictionary.max-everyday.com
DocumentRoot /var/www/dictionaryweb
SSLEngine on
SSLCertificateFile /etc/ssl/certs/cloudflare.pem
SSLCertificateKeyFile /etc/ssl/private/cloudflare.key
<Directory /var/www/dictionaryweb/>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
最後步驟
設定完成後,請先啟動 Apache 的 SSL 模組:執行 sudo a2enmod ssl
接著執行 sudo apache2ctl configtest
檢查語法,沒問題後用 sudo systemctl restart apache2
重啟。
最後,回到 Cloudflare 後台,將 SSL/TLS 模式從「Flexible」改成「Full (Strict)」。這樣從瀏覽器到 Cloudflare,再到你的伺服器,全程都會是加密的安全連線。
建議不要完全移除,但可以將其簡化為「自動轉址」功能。
保留 80 埠設定檔的原因
雖然你現在改用 HTTPS,但有些使用者或舊的書籤可能還是會輸入 http://。如果直接移除 80 埠的設定,當有人嘗試用 HTTP 訪問時,伺服器會因為找不到對應的設定而噴出錯誤,或是顯示出預設的 Apache 歡迎頁面。
最好的做法是讓 80 埠只負責一件事情:把所有訪客推向 HTTPS。
建議的簡化設定
你可以將原本 80 埠的設定檔內容改寫成這樣,就是一個「自動導航」:
<VirtualHost *:80>
ServerAlias dictionary.max-everyday.com
Redirect permanent / https://dictionary.max-everyday.com/
</VirtualHost>
這樣無論訪客從哪裡進來,都會被安全地引導到你剛設定好的 443 埠(HTTPS)。
Cloudflare 的替代方案
其實,如果你在 Cloudflare 後台開啟了「Always Use HTTPS」功能,Cloudflare 在雲端就會幫你處理掉轉址,流量根本不會到達你的 80 埠。
不過,在伺服器端保留這幾行設定是一種「保險」。萬一哪天你暫時關閉了 Cloudflare 的 Proxy(變回灰雲朵),你的網站依然能維持自動轉跳 HTTPS 的功能,不會因此變得混亂。
你想知道怎麼在同一個設定檔裡同時寫好 80 和 443 埠嗎?
在同一個設定檔裡,你只需要寫兩個 VirtualHost 區塊。這就像是在同一個檔案裡放兩個不同的導航說明。
設定檔寫法範例
你可以直接把原本的 015-dictionary.conf 修改成以下內容:
<VirtualHost *:80>
ServerAlias dictionary.max-everyday.com
# 把 HTTP 流量永久轉向 HTTPS
Redirect permanent / https://dictionary.max-everyday.com/
</VirtualHost>
<VirtualHost *:443>
ServerAlias dictionary.max-everyday.com
DocumentRoot /var/www/dictionaryweb
SSLEngine on
SSLCertificateFile /etc/ssl/certs/cloudflare.pem
SSLCertificateKeyFile /etc/ssl/private/cloudflare.key
<Directory /var/www/dictionaryweb/>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/dictionary_error.log
CustomLog ${APACHE_LOG_DIR}/dictionary_access.log combined
</VirtualHost>
注意事項
雖然寫在一起很方便,但請記得檢查你的 Ubuntu 防火牆(例如 ufw)。如果之前只開了 80 埠,現在必須執行 sudo ufw allow 443/tcp。否則,雖然 Apache 設定好了,外面的封包還是進不來。
另外,如果你的主機上有其他網站,建議每個網站的 Log 檔案名稱稍微分開(例如上面的 dictionary_error.log),這樣出問題時才不會所有網站的錯誤訊息都擠在一起。
最後,存檔後一樣要執行 sudo apache2ctl configtest
看到 Syntax OK 的字樣,再重啟 Apache 才會生效。
需要我教你怎麼看 Apache 的錯誤日誌來確認設定有沒有成功嗎?
設定 Cloudflare 的 SSL 模式是確保連線安全的最後一步。這能保證從瀏覽器到伺服器的整條路徑都被嚴密加密。
進入 SSL/TLS 設定頁面
首先,登入 Cloudflare 後台並選擇你的網域(max-everyday.com)。在左側導覽列中,你會看到一個「SSL/TLS」的選項,點擊它後預設會進入「Overview(總覽)」頁面。
在這個頁面的中間,你會看到一個四格的選擇器,分別是 Off、Flexible、Full、Full (Strict)。

選擇 Full (Strict) 模式
請直接點擊「Full (Strict)」這個選項。
- 為什麼選這個? 因為你已經在 Apache 上安裝了 Cloudflare 提供的 Origin Certificate。
- 與 Full 的差別: 「Full」只要有證書就行,不論過期或非法;而「Full (Strict)」會嚴格檢查你伺服器上的證書是否為 Cloudflare 簽發且有效。
- 安全性: 這是最高等級的加密方式,可以防止中間人攻擊,確保流量真的進到了你的 Ubuntu 伺服器。
開啟 Always Use HTTPS
設定完模式後,點擊左側選單「SSL/TLS」底下的「Edge Certificates」。在頁面下方找到「Always Use HTTPS」開關,將它切換為「On」。
這樣一來,Cloudflare 就會主動把所有嘗試連入 http 的訪客直接導向 https,這比你在 Apache 寫轉址反應更快,也能減少伺服器的負擔。
驗證設定是否生效
完成後,你可以再次使用 curl -v https://dictionary.max-everyday.com 進行測試。
如果設定成功,你應該會看到 SSL 連線建立成功,且不會再出現 301 轉址(因為你已經直接訪問 https 了)。如果畫面出現「526 Invalid SSL certificate」錯誤,通常代表你 Apache 上的 .pem 或 .key 檔案路徑貼錯了,或者是忘了重啟 Apache。
需要我幫你寫一段自動檢查 Apache 憑證路徑是否正確的指令嗎?