在 Cloudflare、Nginx、Application Server 三層架構下,AP 收到的 IP 可能是 Cloudflare 節點的、Nginx 的 127.0.0.1、或使用者的真實 IP,搞混會讓 Rate Limit 和 access log 全部失準。本文圖解請求經過每一層時 X-Forwarded-For、X-Real-IP、CF-Connecting-IP 的變化,說明 Nginx real_ip 還原設定,並提供 Node.js、Python、Java、C# 取得真實 IP 的範例。
Cloudflare與Nginx反向代理|CF-Connecting-IP、X-Forwarded-For 取得真實IP
用 Docker 架設 Gitea rootless 版|安全的自架私人 Git 伺服器教學
想擁有一台完全自己掌控的 Git 服務,Gitea 是輕量又好維護的選擇。這篇用 Docker 的 rootless 版本從零架起一台 Gitea,容器內以非 root 身分執行、把提權風險降到最低,搭配 PostgreSQL 當資料庫。重點放在安全設定:關閉使用者自行註冊、要求登入才能瀏覽、用 CLI 建立管理員避開裸奔的安裝頁、保留 git hooks 的預設保護、強制 2FA,最後說明對外發布時該怎麼接上反向代理與 HTTPS。
Nginx Rate Limit 限流原理與設定教學|burst、nodelay 圖解
API 被爬蟲打爆、登入頁被暴力嘗試、單一 IP 把頻寬吃光,這些是現代網站常見的麻煩,Nginx 內建的 limit_req 模組幾行設定就能擋下異常流量。本文從 Leaky Bucket 演算法的原理講起,搭配圖解逐一拆解 limit_req_zone 的 key、zone、rate 與 limit_req 的 burst、nodelay、delay 等參數,並比較三種常見模式的差異,最後給出實戰設定範例與 503 監控建議。
使用GitHub Actions自動部署服務到自己的伺服器
使用自己的伺服器部署服務的情況下,利用GitHub做CI/CD有很多方式,例如使用定期執行每隔一段時間就上GitHub看有沒有新版本要編譯部署、透過Webhooks由GitHub通知伺服器上來拿最新的程式碼編譯部署,本文使用GitHub Actions,在儲存庫更新、收到Pull Request等情況下由GitHub Actions自動執行Workflow,自動打包原始碼、編譯、上傳到遠端伺服器、呼叫遠端腳本重啟服務。
使用樹莓派監測控管UPS設備/Network UPS Tools/Linux
Network UPS Tools(NUT)可以連接各種UPS電源設備,除了Linux之外也有Windows與macOS版本,還是主從式架構可以讓多台電腦共享UPS資訊。本文使用樹莓派連結UPS,讓樹莓派記錄是否發生斷電、電壓是否過高過低、電池是否有問題、定時進行放電測試等各種實用功能。
使用Linux Shell Script,每天自動刪除或定期備份超過N天的日誌檔案
Linux上有很多日誌檔案,通常會依照日期一天產生一個log檔案,時間久了會越來越佔空間。你可能只想保留3天內的、5日內的、一週內的,或是30天一個月內的日誌檔案。本篇文章教學如何寫一個Shell Script定期清理日誌檔,透過Shell Script搭配Crontab自動執行,要把日誌檔刪除或是移到別的硬碟、別的網路硬碟備份都可以。
Linux Top指令排序與搜尋篩選指定程式
在Linux上要看Process(處理程序、程序、進程)的狀況可以使用top指令,直接在Terminal上輸入top就會進入互動介面。預設情況會進入互動模式,並且不斷更新顯示近況,如果想尋找特定的Process可以參考本文教學。
在Windows使用IIS、Apache、Nginx申請免費SSL/TLS憑證,自動從Let’s Encrypt更新
本文將教學如何在Windows上申請Let’s Encrypt的SSL/TLS憑證,讓網站擁有HTTPS連線的機制。有時候為了讓各種後端語言同時存在,會在Windows上先安裝Apache或Nginx網頁伺服器,再反向代理到伺服器上的PHP、ASP、Java、NodeJS、Django等AP Server。因此在Windows上使用IIS(Internet Information Server)、Apache、Nginx申請憑證的方法都包含在文章內,一起讓瀏覽器網址列上面顯示有鎖頭的HTTPS吧。
每天定時自動備份Docker內的MySQL、MariaDB與MongoDB,Linux、macOS與Windows都可用
本文介紹如何備份與還原在Docker內的MySQL、MariaDB、MongoDB資料庫,以及寫一個在Linux與Windows內都能夠順利執行的腳本,讓電腦每天自動執行腳本備份資料庫。
使用Linux Bash或是Windows Batch產生當前日期的檔案名稱
透過定時執行腳本完成一些自動化的工作,常常會需要使用時間來命名一些檔案。例如我想要一個檔案名稱是透過現在的日期產生的,同時包含年月日時分秒,像是「log_20220628_123000.txt」,該如何透過Linux腳本或是Windows腳本自動產生呢?本文將教學Linux與Windows各自的產生方式。