用于 3 个 Web 服务器的 OpenBSD 中继 SSL 反向代理

用于 3 个 Web 服务器的 OpenBSD 中继 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-requests

但 SSL 与 HTTPS 似乎有所不同。看来我必须在代理和服务域的 Web 服务器上安装 SSL 证书。

  1. 任何人都可以为此建议适当的语法吗?
  2. 我可以同时为同一台机器提供 80 和 443 端口服务吗?谢谢。

答案1

通常在此类前端中,您在前端安装 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"
匹配标头设置 "X-Forwarded-By" \
值 "$SERVER_ADDR:$SERVER_PORT"
匹配标头设置 "Keep-Alive" 值“$超时”

匹配查询哈希“sessid”
匹配哈希“sessid”

传递
块路径“/cgi-bin/index.cgi”值“命令=

tls { 没有 tlsv1.0,密码“HIGH” }
}

中继“tlsaccel”{
监听www.example.com端口443 tls
协议“https”
转发到端口8080模式负载平衡检查tcp
}

如果ssl或 tlskey存在,它会尝试根据虚拟主机关联的 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 中查找公共证书,其中 address 是要侦听的中继的指定 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 代理添加到上述配置中即可。它们可以同时共存。

相关内容