Nginx 設定 SNI Routing 讓 Reverse Proxy Upstream 自己管理 SSL 憑證

我自己家中的 home lab 是用 Proxmox 安裝的 VM 環境,Proxmox 非常好用,然而有一點非常困擾我:由於我只有一個固定 IP,因此我的不同 domain 都要由同一台 VM 做 reverse proxy。平常這樣用起來沒什麼問題,然而在安裝某些服務,好比 Jitsi、Matrix 時,它會需要存取到 SSL 憑證,因此我得將它放在跟 reverse proxy 同一台 VM 上,否則 Jisti 會讀不到 certbot 產生的憑證。這一直造成我非常大的困擾,直到最近向朋友請教,認識到了 SNI Routing 這項技術。 SNI 全稱 Server Name Indication,是 TLS 的一個擴充協定,會在客戶端進行連線請求時,附帶 domain name 資訊,用途在於多個 domain name 都指向同一個 IP 地址時,讓伺服器得以判斷要使用哪一個憑證進行連線。Nginx 平常的 Virtual Host 就已經有利用 SNI 的技術了,我們接著還要結合 Nginx 的 stream 功能,來轉發 HTTPS 的 TCP 封包。 Nginx 的 stream 模組能重新導向 TCP 或 UDP 封包,類似 port forwarding 但還是有些不一樣,Nginx 的 stream 會改變封包的來源位址,因此還需要一些設定來還原。 註:本文目前還沒有處理好轉發 client IP 的問題。...

September 5, 2022 · 2 分鐘 · wancat

自由的伺服器測速工具 LibreSpeed 安裝教學

自己架站有時候需要了解伺服器的網速實際上有多快,這時可以在伺服器上安裝 LibreSpeed 這套軟體,打開網頁就能測連線到伺服器的速度。LibreSpeed 有 PHP 和 Go 實作,身為 Gopher 當然要用 Go 實作!本篇將以 Go 實作為範例。 Go 安裝 首先要安裝 Go,到 Golang 官網 下載你平台的壓縮檔,Raspberry Pi 選 armv6l,一般電腦要選 amd64,然後將其解壓縮: wget https://golang.org/dl/go1.16.7.linux-armv6l.tar.gz sudo tar -zxvf go1.16.7.linux-armv6l.tar.gz -C /usr/local 將 Go 加到 PATH 中,打開你的 Shell 設定檔(Bash 是 ~/.bashrc,Zsh 是 ~/.zshrc),在最後加入: export PATH=$PATH:/usr/local/go/bin 儲存後重開一個 shell,看有沒有成功安裝: $ go version go version go1.16.7 linux/arm LibreSpeed 安裝 下載並編繹 LibreSpeed git clone https://github.com/librespeed/speedtest-go.git cd speedtest-go go build -ldflags "-w -s" -trimpath -o speedtest main....

August 10, 2021 · 2 分鐘 · wancat