[linux][nginx]nginx反向代理 webdav服務

反向代理一個完整 WebDAV 伺服器

# 假設後端 WebDAV 在 http://192.168.0.111:8080/dav/
server {
    listen 443 ssl;
    server_name dav.example.com;

    # ... SSL 設定略 ...

    client_max_body_size 0;           # 不限制上傳大小(視需求)
    proxy_http_version 1.1;           # WebDAV/長連線建議用 HTTP/1.1
    keepalive_requests 1000;

    location / {
        proxy_pass http://192.168.0.111:8080;

        # 讓反代更「透明」
        proxy_set_header Host              $host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 重要:保留 WebDAV 特有標頭(部分客戶端很依賴)
        proxy_set_header Destination   $http_destination;
        proxy_set_header Depth         $http_depth;
        proxy_set_header Overwrite     $http_overwrite;
        proxy_set_header If-None-Match $http_if_none_match;
        proxy_set_header If-Match      $http_if_match;
        proxy_set_header If-Modified-Since $http_if_modified_since;
        proxy_set_header If-Unmodified-Since $http_if_unmodified_since;
        proxy_set_header Lock-Token     $http_lock_token;
        proxy_set_header Timeout        $http_timeout;
        proxy_set_header Range          $http_range;
        proxy_set_header If-Range       $http_if_range;
        proxy_set_header Expect         $http_expect;  # 100-continue

        # 大檔/串流上傳(避免先寫到磁碟)
        proxy_request_buffering off;
        proxy_buffering off;

        # 某些 Windows WebDAV 客戶端相容性
        chunked_transfer_encoding off;  # 視後端/客戶端而定
    }
}

小重點

  • 不要用 limit_except GET { ... } 這類把非 GET/HEAD/POST 擋掉的設定。
  • 若前端做 Basic/Auth,確定與後端認證邏輯不互相衝突(雙重 401 會讓部分客戶端混亂)。
  • 如果需要讓後端知道真正的 Host/Proto,務必帶 X-Forwarded-*
  • 檔案很大或想節省 Nginx 磁碟 I/O,關 proxy_request_buffering
  • 某些客戶端(特別是 Windows WebClient)對 HTTPS、OPTIONSExpect: 100-continue、是否使用 chunked encoding 特別敏感,上面參數可改善相容性。

快速檢查清單

  • 後端 WebDAV 功能完整(含 LOCK/UNLOCK/PROPFIND)。
  • Nginx 沒擋 WebDAV 方法(未使用不當 limit_except)。
  • 保留並轉送 WebDAV 標頭(Destination/Depth/Overwrite/If-* 等)。
  • proxy_http_version 1.1、必要時關 proxy_request_buffering
  • 設好上傳大小(client_max_body_size)。
  • 與客戶端相容性調整(HTTPS、OPTIONS 回應、100-continue、chunked)。

結論

  • 要「完整轉送服務」:用 Nginx 當反代、把細節調好 → ✅ 沒問題。
  • 要「自己提供完整 WebDAV」只靠 Nginx 原生模組 → ❌ 不建議,功能不全。

使用 certbot 向 Let’s Encrypt 申請憑證

安裝 certbot

官方建議使用 Canonical 的 snapcraft 來進行安裝。
Ubuntu 通常都已預裝好 snapcraft (因為 Ubuntu 的爸爸就是 Canonical),可以使用下方的指令確保使用最新的 snapcraft 版本。

sudo snap install --classic certbot

設定軟連結讓 Certbot 指令可以執行。

sudo ln -s /snap/bin/certbot /usr/bin/certbot

向 Let’s Encrypt 申請憑證

啟動 Certbot,使用手動授權方法搭配 DNS 查問以驗證網域所有權,這會為您的頂層網域及其子網域請求萬用字元憑證。

sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly
  • –manual:使用手動驗證。
  • –preferred-challenges dns:使用 dns (亦可改用http)的方式 challenge 。
  • certonly:只產生憑證,讓 Certbot 不要自動產生或修改 Nginx 的設定檔案。

Rocky與CentOS 8 網卡指令

Rocky 與 CentOS 的網卡指令從第8版後已經不再是systemctl restart network, 而是改用『nmcli』 這個指令。

查看網卡IP

ip address

可簡化為

ip a

列出網卡資訊

nmcli

查看網卡狀態

nmcli device status

秀出網卡詳細資訊

nmcli device show

查看網卡en160詳細資訊

nmcli device show ens160

重啟網卡

nmcli connection restart

啟動或關閉網卡

nmcli c up ens160
nmcli c down ens160

設定網卡開機自動啟動

nmcli c modify ens160 connection.autoconnect yes

剛除連接網卡

nmcli c delete ens160

新增/刪除一個IP位址和閘道

nmcli c modify ens160 +ipv4.address 192.168.0.3/24  #新增ip
nmcli c modify ens160 -ipv4.address 192.168.0.3/24  #删除ip
nmcli c modify ens160 ipv4.gateway 192.168.0.1  #設定閘道

設定DNS

nmcli c modify ens160 ipv4.dns 8.8.8.8  #新增DNS
nmcli c modify ens160 -ipv4.dns 8.8.8.8  #删除DNS

設定IP取得方式

nmcli connection modify ens160 ipv4.method manual  #手動設定
nmcli connection modify ens160 ipv4.method auto  #DHCP自動取得

讓設定重效(修改後要執行才能生效)

nmcli connection reload

立刻生效網卡設定, 不必重新啟動系統(三擇一)

nmcli c up ens160
nmcli device connect ens160
nmcli device reapply ens160

snmp v2 設定mrtg

方法只是差別在多一個參數而已,另外產出的cfg檔裡, IP後面也都會加5個冒號

SNMPv1:
cfgmaker public@192.168.1.1 > kh.cfg

SNMPv2:
cfgmaker –snmp-options=:::::2 public@192.168.1.1 > kh.cfg

MOD合約問題

最近因為去年訂閱的MOD家庭組合餐(含體育台及discovery)沒什麼在看了, 所以想把它退掉, 一個月也省109元‧結果卻發現居然在7月時才重簽合約, 而且變成簽2年不可退, 不然要付違約金, 而電影199本來是送的, 反而變成要另外付費的選購, 每個月要付119, 真是令人驚訝~

七月時因為網路及電話皆斷線, 去報修時, 被推銷升級, 由原本的60M/20M升級為100M/40M, 當時說只有每個月多40元, 其餘都不變, 但結果卻是什麼都變了。

經向中華電信反應, 今天下午有打電話來處理, 要把電影199列到合約裡, 把精選餐退掉, 但合約要自這個月重簽二年。

我原本的精選餐109, 卻變成電影的加選, 每個月多付10元, 錢雖是不多, 但這不合理, 客服卻說七月時因為合約要重簽, 所以當時的家庭精選餐是129/月, 所以把它列入合約內, 反而是比較便宜的; 但這說法我完全不能接受, 合約要變更, 只告知我寬頻的部份, 而MOD只說是送的, 沒有異動, 結果卻變很大, 若是家庭精選餐重簽要漲價, 也應該事先告知, 我可以不要訂啊, 怎麼自己就把它變成合約裡的東西, 而電影199卻變成加選的項目, 另外付費, 隨便異動合約卻未告知, 這是現在的作法, 這樣以後誰敢相信中華電信。

還好今天的客服還很客氣的幫我把合約修正了, 雖然損失了30元及合約要重算二年, 但至少已經排除問題, 把損失降到最低。這個經驗告訴我們,換了合約可能會被客服騙, 所以隔月一定要細看帳單, 以避免自己的損失。