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

從零開始的 Nextcloud 完整安裝教學

用兩顆外接硬碟組 RAID 1,設定 DDNS、Nginx,並安裝 Nextcloud,以及後續的 PHP 調校與 Redis 快取。

August 7, 2021 · 8 分鐘 · wancat

elementary OS 啟用 System Tray

elementary OS 是一個好看、易用的 Linux 發行版,然而它有一個缺點:系統狀態欄(system tray)無法顯示其他應用程式的 icon,這導致像輸入法、Discord 等有使用 system tray 的程式無法使用完整功能。最討厭的莫過於 HP 印表機驅動 HPLIP,每次開機就跳出來說 no system tray deteched,非常煩人。 原因是 elementary OS 基本上不希望其他應用程式去使用 system tray,並且停止支援 Ayatana Indicator API,做出相同決定的還有 GNOME,參考 Status Icons and GNOME。 安裝 Ayatana Indicator sudo add-apt-repository ppa:yunnxx/elementary sudo apt update sudo apt install indicator-application wingpanel-indicator-ayatana 編輯 /etc/xdg/autostart/indicator-application.desktop 加入 Pantheon OnlyShowIn=Unity;GNOME;Pantheon; 接下來重新啟動 X 或是重開機 sudo service lightdm restart # or reboot 完成後 elementary 就可以顯示各個應用程式的圖示了! References How to display system tray icons in elementary OS Juno?...

February 12, 2020 · 1 分鐘 · wancat

在 Raspberry Pi 安裝 Nextcloud

Nextcloud 是一套自由的雲端硬碟系統,可以讓你自己架設像 Google Drive、One Drive 一般的雲端硬碟,將資料掌握在自己手中,本篇紀錄如何在樹梅派安裝 Nextcloud。 安裝 到官方網站下載壓縮檔 sudo unzip -d /var/www nextcloud-18.0.0.zip sudo chown www-data:www-data /var/www/nextcloud PHP 安裝 PHP 依賴模組 sudo apt install php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip 參閱 官方文件 檢查依賴的 PHP 模組,或是擴充功能像是 smb、ldap 等等。 MySQL 建立 Nextcloud 的資料庫和使用者 $ sudo mysql > create database nextcloud; > create user 'nextcloud'@'localhost' identified by 'password'; > grant all privileges on nextcloud . * to 'nextcloud'@'localhost'; > flush privileges; Caddy 複製 Caddy 提供的 Nextcloud Caddyfile 到 /etc/caddy/Caddyfile,接著修改成你自己的域名、PHP 路徑。我的設定檔如下:...

February 11, 2020 · 3 分鐘 · wancat

Caddy 安裝教學

Caddy 是一個由 Go 撰寫的 Web Server,其主要賣點是簡單的設定檔,適合在開發環境中快速架設,還有自動 HTTPS 的功能,相當方便。 我之前在 Linode 上就使用 Caddy,覺得體驗相當好,因此這次也選擇使用它。 安裝 到 Caddy 網站的下載頁面,複製 One-step installer script 就可以一鍵安裝。 curl https://getcaddy.com | bash -s personal 如果是要拿來當開發環境中的 Web Server,這樣就足夠了,但我要讓它在背景執行,因此還需要設定好它的 systemd。 Systemd 請參考官方的安裝教學,照著做就行了,比較容易踩雷的是取得憑證的部份,首先 Let’s Encrypt 會對你做 DNS challenge,所以如果是使用 CloudFlare 的,要把 Proxy 關掉(雲朵)。再來是寫設定檔,Caddy 的設定檔相當簡單,不過用 systemd 就是很難除錯(看 log 麻煩),所以建議先自己用 sudo caddy -conf /etc/caddy/Caddy 測試設定檔,等到沒問題再用 systemd 開。 設定檔範例 以下是我網站使用的設定檔 matomo.wancat.cc { root /var/www/matomo gzip fastcgi / /var/run/php/php7.3-fpm.sock php { index index.php } } lincalvino.me/narcissism { root /var/www/narcissism } lincalvino....

February 4, 2020 · 1 分鐘 · wancat

CloudFlare 設定 DDNS 教學

最近剛入手一個 Raspberry Pi,用來作為一個省電的伺服器,本來困擾自己家裡的固定 IP 已經給了其他台伺服器,但找到方法用 CloudFlare 實現 DDNS。 CloudFlare DDNS CloudFlare 本身沒有官方的 DDNS 支援,但可以用 CloudFlare API 實做,我找了一個別人做好的 CloudFlare-ddns,折騰一會兒就設定好了。 首先安裝 cloudflare-ddns 和其依賴,然後以我要設定 pi.wancat.cc 為例,建立 site_pi.yaml 設定檔,填入以下內容: %YAML 1.2 # CloudFlare DDNS updater script config. --- # CloudFlare API key # You can find this under Account > My account after logging into CloudFlare. cf_key: 'your key' # Email address for your CloudFlare account. cf_email: 'your email' # Domain you're using CloudFlare to manage....

February 4, 2020 · 2 分鐘 · wancat

Google Analytics 替代方案 Matomo 安裝教學

因為實在不想再讓 Google 拿到資料了,所以我到 No More Google 網站上找 Google Analytics 的替代方案,第一名就是 Matomo。 Matomo 是一個自架的流量分析程式,是自由軟體,也有提供付費的 Cloud hosting 服務。我在試用後覺得還不錯,就決定自行在 Raspberry Pi 上安裝。因為是自架的,所以資料都在自己手上,不會被 Google 拿去利用。 安裝方式參考官方文件。 環境需要 PHP、MySQL or MariaDB PHP 安裝: sudo apt-get install php7.0 php7.0-curl php7.0-gd php7.0-cli mysql-server php7.0-mysql php-xml php7.0-mbstring 資料庫我比較偏好社群維護的 MariaDB: sudo apt install mariadb-server sudo mysql_secure_installation 建議在執行 mysql_secure_installation 來強化安全性。 由於我使用 Caddy,所以 Caddyfile 中要加入以下程式: matomo.wancat.cc { root /var/www/matomo # 換成你的 matomo 位置 gzip fastcgi / /var/run/php/php7.3-fpm.sock php { index index.php } } 然後打開網頁,就可以看到安裝程式了。接著要幫 Matomo 設定好 SQL User 和 Database,...

February 4, 2020 · 1 分鐘 · wancat