過去筆者慣於將 Web 部署在 Azure 上,以 https 協定訪問是標準配備。不過這次因為上雲的服務還要往後端 Request 一個 Web UI 當資料來源,而且這個後端限定僅接受來自於 TW 的要求,所以只好往台智雲上搬。不過上去之後,因為只有一個 IP 地址,其他諸如 FQDN、SSL 等都要自行準備,過程有點繁瑣,於是以本文嘗試簡化並紀錄下來。
首先要在台智雲開一部虛擬主機,因為 Web 是用 DotNET 8 寫的,當然選便宜的 Linux 就夠,每小時成本可以壓在 NT$2 以下;因為對外服務,所以要一個 Public IP,不是經常開關,所以浮動的也可以。
這裡要記得檢查一下台智雲相關的 Security Group 設定,我看到的是 ssh https 有開,http 需要自己補。這個只是為了憑證申請過程中使用,所以不用擔心,我們主要的流量還是走安全的 https。
拿 Public IP 去配一個免費的 FQDN 還算容易,No-IP
或 DuckDNS
都可以,當然還有很多選擇,看個人喜歡或熟悉。
為了簡化安裝設定,在虛擬主機上先裝 Docker 為底,未來我們會起兩個 Container,一個負責 DotNET Web,另一個負責反向代理兼憑證管理,這個 Image 叫 Secure Web Application Gateway (SWAG),可以讓我們省很多事。Compose.yaml 內容如下,一次就把兩個 Container 開啟。
services: swag: image: lscr.io/linuxserver/swag cap_add: - NET_ADMIN environment: - PUID=1000 - PGID=1000 - TZ=Asia/Taipei - URL=yourFQDN - VALIDATION=http volumes: - /home/ubuntu/swag/config:/config ports: - 443:443 - 80:80 restart: unless-stopped aspnet8: image: mcr.microsoft.com/dotnet/aspnet:8.0 volumes: - /home/ubuntu/out:/app working_dir: /app ports: - 8080:8080 command: dotnet ./myWeb.dll
有幾個地方要特別說明的:
... location / { proxy_pass http://aspnet8:8080/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } ...
只要找到 location / 這個段落人修改,前後的一些內容都不變,只是在此省略。要注意第三行 aspnet8 呼應到 compose.yaml 第 18 行,埠號 8080 對應到第 24 行。改完後可以下指令單獨請 SWAG 重新載入設定,或簡單地重啟也會生效。一切正常的話,我們就可以從外界以 https 訪問到台智雲上的 Web 應用程式了。