Ssl

OpenBSD 為 3 個 Web 伺服器中繼 SSL 反向代理

  • August 24, 2017

我在三台不同機器上的防火牆後面執行虛擬伺服器(每台機器伺服器不同的域,它不是一個集群)。要自動更新 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 證書。

  1. 任何人都可以為此建議一個適當的語法嗎?
  2. 我可以為同一台機器同時提供埠 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

}

如果存在sslor tls key,它會嘗試根據與 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 代理添加到上述配置中。它們可以同時共存。

引用自:https://unix.stackexchange.com/questions/387422