Select Page

如何用 Nginx 反向代理 SSL 的網站

在從網路上取得網頁時,如果想用 Nginx 作為反向代理器來連線一個介由 Cloudflare 保護且介面是 HTTPS 的網站,你可能會遇到一些繁複的錯誤,包括 Cloudflare Error 1001,502 Bad Gateway,或 421 Misdirected Request 等,這邊就分享一下我遇到的經驗以及如何正確設定 Nginx,反向代理一個有 SSL 保護的網站。

環境概要

  • Nginx 作為前端 proxyshop.example.com
  • Upstream 目標https://target.example.com(Cloudflare 網站)
  • Cloudflare 用於 DNS + CDN + WAF

1. Nginx 基礎設定

幾個重點

1.1 要聽 443 port

1.2 要設定 proxy_ssl_name, proxy_ssl_server_name

1.3 DNS 要設定 resolver

upstream secure_pool {
    server target.example.com:443;
    keepalive 16;
}

server {
    listen 443 ssl;
    server_name shop.example.com;

    ssl_certificate /etc/letsencrypt/live/shop.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/shop.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    resolver 1.1.1.1 8.8.8.8 valid=300s;

    location / {
        proxy_pass https://secure_pool;
        proxy_ssl_server_name on;
        proxy_ssl_name target.example.com;
        proxy_set_header Host target.example.com;
        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;
        proxy_set_header User-Agent "Mozilla/5.0 (compatible; Nginx Proxy)";
    }
}

2. 常見錯誤與解決方案

❌ Error 1001 – DNS Resolution Error (Cloudflare)

  • 原因:Cloudflare 無法解析 upstream hostname
  • 解決:確保 Nginx 加入 resolver 設定

❌ 502 Bad Gateway

  • 原因:upstream HTTPS 連線失敗
  • 解決:
    • proxy_pass 設為 https://...
    • proxy_ssl_server_name on;
    • 加入 proxy_ssl_name + Host 不要用 $host

❌ 421 Misdirected Request

  • 原因:SNI 與 Host header 不符
  • 解決:
    • proxy_ssl_name target.example.com;
    • proxy_set_header Host target.example.com;

3. Debug 技巧

看 error log 解答還原:

用 curl 測試 upstream 是否支援 HTTPS

4. 結論

要用 Nginx 來反向代理一個 SSL 網站,最重要的是使 Nginx 能「知道」你的 upstream 是 HTTPS,且 TLS SNI 與 Host 項目必須一致。

免費文字轉語音工具推薦:Speech Synthesis 支援 40 種語言與多樣語音選擇

免費文字轉語音工具推薦:Speech Synthesis 支援 40 種語言與多樣語音選擇

Speech Synthesis 是一款免費的線上文字轉語音工具,支援超過 40 種語言和數百種語音選擇,並可自訂語調(SSML)、節奏與語氣,讓語音更貼近您的需求。

🔑 主要特色

  • 多語言支援:涵蓋繁體中文、粵語、英語、日語等多種語言,滿足全球用戶的需求。
  • 多樣化語音選擇:提供數百種語音,包括不同性別、年齡和口音的選項。
  • 自訂語音參數:可調整語速(如 x-slow、slow、medium、fast、x-fast)、語調和音量,打造個性化的語音輸出。
  • 支援 SSML:支援語音合成標記語言(SSML),讓進階用戶能夠更精細地控制語音輸出。
  • 多種音訊格式:可選擇 MP3、WAV 等格式,並提供不同的音質設定,如 16kHz-128k、24kHz-160k、48kHz-192k。

🧪 使用方式

  1. 前往 Speech Synthesis 官方網站
  2. 在「TEXT」欄位輸入您要轉換的文字,或上傳文件。
  3. 選擇語言和語音,並調整語速、語調和音量等參數。
  4. 點擊「合成語音」按鈕,系統將生成語音檔案。
  5. 試聽並下載生成的語音檔案。

🔍 與其他熱門 TTS 工具的比較

工具名稱語言支援數語音選擇數自訂參數支援 SSML價格
Speech Synthesis40+數百種免費
TTSMaker100+600+免費
Google Text-to-Speech30+220+免費(有使用限制)
MyEdit26+多種免費

參考資料

提升 App 測試效率:UIAutoDev UI定位與 XPath 自動生成指南

提升 App 測試效率:UIAutoDev UI定位與 XPath 自動生成指南

UIAutoDev 是一款不可或缺的工具,它支援 Android 和 iOS 平台,提供直觀的圖形介面,讓開發者能夠輕鬆地定位 UI 元素、生成選擇器,並進行色彩分析。

UIAutoDev UI DEMO

🔧 UIAutoDev 的核心特色

1. 支援 Android 和 iOS 平台

UIAutoDev 同時支援 Android 和 iOS 裝置的 UI 元素檢視與操作。​對於 iOS,用戶需自行啟動 WebDriverAgent(WDA)服務,以實現與裝置的連接。​

2. 直觀的控件選擇與屬性檢視

透過滑鼠點選應用程式中的控件,UIAutoDev 會即時顯示該元素的屬性資訊,如 resource-idtextclass 等,並在控件樹中高亮顯示,方便用戶精確定位。​

3. 自動生成 XPath 選擇器

UIAutoDev 能夠根據選取的控件,自動生成多個 XPath 選擇器,並標示每個選擇器匹配的元素數量,協助用戶選擇最合適的定位方式。​

4. 色彩分析與坐標微調

工具提供找色功能,允許用戶獲取指定位置的 RGB 和 HSB 色值。​同時,透過方向鍵微調坐標,精確定位需要操作的區域,提升自動化腳本的準確性。​


🚀 安裝與使用指南

1. 安裝 Python 環境

確保系統已安裝 Python 3.8 或以上版本。​

2. 安裝 UIAutoDev

在終端機中執行以下命令:

pip install uiautodev

3. 啟動 UIAutoDev

安裝完成後,執行以下命令啟動工具:

python -m uiautodev

啟動後,瀏覽器將自動打開 UIAutoDev 的網頁介面。​

4. 連接裝置

  • Android:​啟用開發者選項並允許 USB 偵錯,使用 USB 或 Wi-Fi 連接裝置。
  • iOS:​啟動 WebDriverAgent(WDA)服務,並確保裝置與電腦在同一網路下。​

5. 使用工具進行 UI 元素定位

  • 在網頁介面中選擇已連接的裝置。
  • 點擊「刷新」按鈕,同步裝置當前畫面。
  • 使用滑鼠點選畫面中的控件,查看其屬性資訊,並在右側控件樹中進行導航。
  • 利用自動生成的 XPath 選擇器,快速編寫自動化腳本。

🧪 實際應用範例

可以先看DEMO

以下是一段使用 uiautomator2 與 UIAutoDev 結合的 Python 腳本範例:

import uiautomator2 as u2

# 連接到裝置
d = u2.connect()

# 啟動應用程式
d.app_start("com.example.app")

# 點擊指定的控件
d(resourceId="com.example.app:id/button").click()

# 輸入文字
d(resourceId="com.example.app:id/input").set_text("測試輸入")

# 關閉應用程式
d.app_stop("com.example.app")

透過 UIAutoDev 提供的控件屬性資訊,您可以輕鬆取得 resource-id 等屬性,快速編寫上述腳本。

參考資料

https://testerhome.com/topics/40069

OpenAI 的 AI 3D 解決方案:Point-E 與 Shap-E 的比較與應用

OpenAI 的 AI 3D 解決方案:Point-E 與 Shap-E 的比較與應用

OpenAI 推出了兩款開源的 3D 建模工具:Point-EShap-E,分別專注於從文字或圖片生成 3D 模型,接下來介紹這兩個模型的核心特性、技術架構、使用方法,並比較它們的優缺點,協助您選擇最適合的工具。​

🔍 Point-E:快速生成 3D 點雲的 AI 工具

📌 核心特點

  • 輸入類型:​支援文字描述或 2D 圖片。
  • 輸出格式:​生成彩色點雲(point cloud),可轉換為網格(mesh)。
  • 處理速度:​在單張 GPU 上約需 1–2 分鐘。
  • 技術架構:​採用兩階段擴散模型,先生成合成視圖,再生成點雲。
  • 應用場景:​快速原型設計、教育用途、遊戲開發等。

🧪 使用方法

  1. 安裝

生成點雲

🧠 Shap-E:生成高品質 3D 隱式模型的 AI 工具

📌 核心特點

  • 輸入類型:​支援文字描述或 2D 圖片。
  • 輸出格式:​生成隱式函數,可渲染為帶紋理的網格或神經輻射場(NeRF)。
  • 處理速度:​在單張 GPU 上可於數秒內生成。
  • 技術架構:​先訓練編碼器將 3D 資產映射為隱式函數參數,再訓練條件擴散模型生成 3D 模型。
  • 應用場景:​高品質 3D 資產創建、AR/VR 應用、3D 列印等。​

🧪 使用方法

  1. 安裝

生成 3D 模型

  • 使用 sample_text_to_3d.ipynbsample_image_to_3d.ipynb 範例筆記本。
  • 可將生成的模型導出為常見的 3D 格式,供進一步編輯或列印。

⚖️ Point-E 與 Shap-E 的比較

特性Point-EShap-E
輸入類型文字、圖片文字、圖片
輸出格式彩色點雲,可轉為網格隱式函數,可渲染為網格或 NeRF
處理速度約 1–2 分鐘數秒內
模型架構兩階段擴散模型編碼器 + 條件擴散模型
輸出品質中等,適合快速原型設計高品質,適合精細 3D 資產創建
應用場景快速原型、教育、遊戲開發高品質 3D 資產、AR/VR、3D 列印等

🧩 適用場景建議

  • Point-E:​適合需要快速生成 3D 模型的場景,如教育、初步設計、遊戲開發等。
  • Shap-E:​適合對 3D 模型品質要求較高的場景,如 AR/VR 應用、3D 列印、動畫製作等。​

🔗 資源連結

參考資訊

GibberLink 教學:實現 AI 助理之間的加密音頻對話

GibberLink 教學:實現 AI 助理之間的加密音頻對話

GibberLink 是一項創新的開源專案,讓 AI 助理之間以更高效的方式進行音頻對話。​這項技術於 2025 年的 ElevenLabs 倫敦黑客馬拉松中脫穎而出,獲得了全球首獎。

🔍 GibberLink 是什麼?

GibberLink 是由 Boris Starkov 和 Anton Pidkuiko 兩位開發者在黑客馬拉松期間開發的開源專案。​其核心理念是讓 AI 助理在識別到對方也是 AI 時,切換到一種更高效的通訊協議,使用聲波傳輸結構化數據,而非傳統的人類語言。​這種方式不僅提高了通訊效率,還減少了計算資源的消耗。

⚙️ GibberLink 的運作原理

  1. 初始對話:​兩個 AI 助理以人類語言開始對話。
  2. 身份識別:​當其中一方識別到對方也是 AI 助理時,提出切換到 GibberLink 模式。
  3. 協議切換:​雙方同意後,切換到使用聲波傳輸數據的通訊協議。
  4. 數據傳輸:​利用開源的 ggwave 庫,將結構化數據編碼為聲波信號,進行高效的數據交換。

這種方式類似於早期撥號調製解調器的數據傳輸,但經過現代化的優化,更適合當前的 AI 通訊需求。​

🔐 AI 加密對話的實現

GibberLink 不僅提高了通訊效率,還注重數據的安全性。​在進行聲波數據交換時,AI 助理會使用非對稱加密技術(如 P-256 密鑰對)進行加密,確保通訊內容的保密性和完整性。​這種端對端的加密方式,即使通訊被攔截,也無法解密其中的內容。

🌐 如何體驗 GibberLink?

  • 線上體驗:​訪問 gbrl.ai,在兩個設備上打開該網站,即可觀察 AI 助理之間的音頻對話。
  • 開源代碼:​GibberLink 的完整代碼已在 GitHub 上開源,地址為 github.com/PennyroyalTea/gibberlink。​

🏆 為何值得關注?

  • 高效通訊:​GibberLink 模式下的 AI 對話比傳統語音通訊快約 80%,大幅提升了通訊效率。
  • 資源節省:​減少了語音生成和語音識別的計算資源消耗,降低了運營成本。
  • 安全保障:​採用先進的加密技術,確保通訊內容的安全性。
  • 開源共享:​開源的特性使得開發者可以自由使用、修改和擴展該技術。

🔧 GibberLink 安裝與本地部署教學

GibberLink 是一個開源專案,您可以在本地環境中部署並體驗 AI 之間的聲音通訊。​

1. 安裝 Node.js(建議版本:v20)

GibberLink 需要 Node.js 環境,建議使用 v18.18.0 或更高版本。以下是使用 NVM 安裝 Node.js 的步驟:

curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20
nvm alias default 20  # 可選,將 Node.js 20 設為預設版本

2.下載並設定 GibberLink 專案

git clone https://github.com/PennyroyalTea/gibberlink.git
cd gibberlink
mv example.env .env

並且編輯 .env 檔案,填入您的 ElevenLabs 和 LLM 提供者的 API 金鑰。​

3.安裝相依套件並啟動專案

npm install
npm run dev

啟動後,您可以透過瀏覽器訪問 http://localhost:3003 來使用 GibberLink。​

參考資料