OpenBSD 為 3 個 Web 伺服器中繼 SSL 反向代理
我在三台不同機器上的防火牆後面執行虛擬伺服器(每台機器伺服器不同的域,它不是一個集群)。要自動更新 Let’s Encrypt 證書,我需要代理根據域名將請求發送到三個不同的伺服器。
+--------+ +-------------+ | +----->| domain1.com | | | +-------------+ | | +-------------+ domain1,2,3.com-->443-->| proxy +----->| domain2.com | | | +-------------+ | | +-------------+ | +----->| domain3.com | +--------+ +-------------+
代理在 OpenBSD 上中繼。我按照本指南(完全相同的情況)使用 HTTP 設置正常 Web 服務: https ://serverfault.com/questions/856807/openbsd-how-to-use-relayd-and-httpd-for-redirecting-subdomain -要求
但是對於帶有 HTTPS 的 SSL 似乎有所不同。似乎我必須在代理和為域提供服務的 Web 伺服器上安裝 SSL 證書。
- 任何人都可以為此建議一個適當的語法嗎?
- 我可以為同一台機器同時提供埠 80 和 443 嗎?謝謝你。
通常在這樣的前端中,您在前端安裝 SSL 流量,並將正常的 HTTP 流量轉發到後端而無需加密。
https http Internet --------> relayd reverse proxy -------> internal LAN web server port 443 port 80
如,在
man relayd
:以下配置將添加一個中繼,以使用負載平衡模式(TLS 加速和第 7 層負載平衡)將安全 HTTPS 連接轉發到 HTTP Web 伺服器池。HTTP 協議定義會添加兩個包含客戶端和伺服器地址資訊的 HTTP 頭,將“Keep-Alive”頭值設置為配置的會話超時,並在雜湊中包含“sessid”變數以計算目標主機:
http協議“https”{
匹配頭集“X-Forwarded-For”\
值“ $ REMOTE_ADDR" match header set “X-Forwarded-By” \ value " $ 伺服器地址: $ SERVER_PORT" match header set “Keep-Alive” value " $ 超時”
匹配查詢雜湊“sessid”
匹配雜湊“sessid”
傳遞
塊路徑“/cgi-bin/index.cgi”值“ command= ”
tls {無 tlsv1.0,密碼“HIGH”}
}
中繼 “tlsaccel” {
監聽 www.example.com 埠 443 tls
協議 “https”
轉發到埠 8080 模式負載平衡檢查 tcp
}
如果存在
ssl
or tlskey
,它會嘗試根據與 vhost 關聯的 IP 地址查找文件。至於 X.509 證書,relayd
將嘗試在/etc/ssl/private
私鑰和/etc/ssl
證書公鑰中找到它們。從中繼代理
如果存在 ssl 關鍵字,例如在我們的行“listen on $ relayd_addr port $ relayd_port ssl”,中繼將接受使用加密 SSL 協議的連接。中繼將在 /etc/ssl/private/address.key 中查找私鑰,並在 /etc/ssl/address.crt 中查找公共證書,其中地址是要監聽的中繼的指定 IP 地址。
因此,文件的名稱必須與中繼正在偵聽的地址相同。在我們的範例 relayd.conf 中,我們正在偵聽“relayd_addr=127.0.0.1”,因此我們的文件必須命名為 127.0.0.1.key、127.0.0.1.csr 和 127.0.0.1.crt。
要為埠 80 提供服務,您只需將常用語法作為 HTTP 代理添加到上述配置中。它們可以同時共存。