省流:有了證書直接改 nginx 的配置即可。
背景#
因為在自己的伺服器上利用 Nexus 搭建了一個私有的 docker 鏡像庫,為了支持 K8s 的預設行為不得不將其升級至 https 。當然也有通過設置 /etc/docker/daemon.json 內的 insecure-registries 字段可支持拉取鏡像時允許使用 http 請求,但很不幸在 v1.23.6 的 k8s 下這個配置死活不生效。在浪費了近兩天的大好時光之後本著能靠花錢解決的問題絕對不死磕的原則,在花費 8 塊錢之後順利解決了(主要是因為買了個域名)。雖然升級伺服器到 https 並不複雜,但作為人生的第一次還是覺得有記錄一下的意義。
準備 SSL 證書#
由於我的伺服器是在阿里雲那買的,因此後續的域名與證書也是直接通過阿里雲獲取的。關於申請免費證書的步驟可以看 這裡。當然如果是公司的項目那還是得去花錢買個靠譜證書(2k 多一年這特麼也太貴了吧!)。不過需要注意的是在獲取 SSL 證書前還需要為自己的伺服器準備一個域名,畢竟申請的證書需要與域名綁定,雖然也存在與 IP 綁定的 SSL 證書,但這種東西並不常見(至少阿里雲沒有)。申請域名之後比較麻煩的事情主要在於把域名掛上 DNS 解析(解析服務也能被分檔次賣錢。。。建站實在是太貴了!雖然也有免費的 QAQ)
將證書上傳到伺服器#
在申請到證書後還需要將證書上傳到目標伺服器中,可以借助 scp 這一命令
scp fileName user@targetIp:目標文件路徑
在連接到遠程伺服器後需要輸入密碼進行驗證,隨後上傳到文件便會出現在目標伺服器上。
配置 nginx#
修改 /etc/nginx/nginx.conf 內的 server 項
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name _;
root /usr/share/nginx/html;
ssl_certificate "修改為密鑰文件路徑";
ssl_certificate_key "修改為密鑰key的路徑";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
上面的配置也順便把伺服器開了 http2,也算是個小優化。
配置後重啟 nginx 便可生效,隨後可通過 curl -I hostName 來進行驗證訪問,當然也可以使用瀏覽器來測試,但如果證書出現問題,你只能在瀏覽器上看見 502 而缺少信息來定位具體問題。
雖然內容有點水,但水文章真開心哇!特別是這種花不了半小時寫的東西實在是太快樂了。