【问题标题】:pfSense + HAProxy – Reverse Proxy with multiple Services on one internal IPpfSense + HAProxy – 在一个内部 IP 上具有多个服务的反向代理
【发布时间】:2019-03-05 16:34:25
【问题描述】:

目前我在我的服务器上使用带有 HAProxy 包的 pfSense,因为我可以通过 GUI 轻松配置它。

我将 HAProxy 配置为与本指南对应的反向代理:https://blog.devita.co/pfsense-to-proxy-traffic-for-websites-using-pfsense/

SSL 卸载就像一个魅力。我遇到的问题是,当我在同一个内部 IP 上拥有多个服务(开放端口)时,它似乎无法正常工作。

示例:

  • 我使用端口 8000 (10.100.10.101:8000) 为 Service1 配置 service1.domain.com,它可以完美运行。
  • 现在我需要同一台机器上的另一个端口(例如 10.100.10.101:8082)和另一个服务。如果我配置另一个指向相同 IP 但使用不同端口的后端,即使我访问 service1.domain.com,我也只能访问第二个服务 (service2.domain.com)。

我的用例是我正在尝试设置 Seafile,它为 Web GUI 使用端口 8000,为文件服务器使用端口 8082。现在我可以访问 Web GUI,但无法上传、下载或共享文件。

我的配置:

# 自动生成,请勿手动编辑。 # 生成于:2018-09-29 19:24 全球的 最大康1000 stats socket /tmp/haproxy.socket 级别管理员 80元 nbproc 1 15m后硬停 chroot /tmp/haproxy_chroot 守护进程 tune.ssl.default-dh-param 8192 服务器状态文件 /tmp/haproxy_server_state ssl-default-bind-ciphers TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:TLS13-CHACHA20-POLY1305-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256 -GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE -RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets ssl-default-server-ciphers TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:TLS13-CHACHA20-POLY1305-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256 -GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE -RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets 听 HAProxyLocalStats 绑定 127.0.0.1:2200 名称 localstats 模式http 统计启用 统计管理员如果为真 统计显示传奇 统计 uri /haproxy/haproxy_stats.php?haproxystats=1 超时客户端 5000 超时连接 5000 超时服务器 5000 前端共享前端合并 绑定 X.X.X.X:443 名称 X.X.X.X:443 ssl crt-list /var/etc/haproxy/shared-frontend.crt_list 模式http 登录全局 选项 http-keep-alive 期权转发 acl https ssl_fc http-request set-header X-Forwarded-Proto http if !https http-request set-header X-Forwarded-Proto https if https 超时客户端 30000 http-response set-header Strict-Transport-Security max-age=15768000 acl aclcrt_shared-frontend var(txn.txnhost) -m reg -i ^([^\.]*)\.domain\.com(:([0-9]){1,5})?$ acl ACL1 var(txn.txnhost) -m str -i test.domain.com acl ACL2 var(txn.txnhost) -m str -i service1.domain.com acl ACL3 var(txn.txnhost) -m str -i service2.domain.com http-request set-var(txn.txnhost) hdr(host) default_backend test.domain.com_ipv4 default_backend service1.domain.com_ipvANY default_backend service2.domain.com_ipvANY 前端 http-to-https 绑定 X.X.X.X:80 名称 X.X.X.X:80 模式http 登录全局 选项 http-keep-alive 超时客户端 30000 http-request 重定向方案 https 后端 test.domain.com_ipv4 模式http 编号 10100 登录全局 超时连接 30000 超时服务器 30000 重试 3 源 ipv4@ 使用rc clientip 选项 httpchk GET / 服务器 testvm-server01 10.100.10.101:54080 id 10101 检查 inter 1000 后端 service1.domain.com_ipvANY 模式http 编号 102 登录全局 超时连接 30000 超时服务器 30000 重试 3 选项 httpchk GET / 服务器 seafile-vm-01 10.100.10.103:8000 id 101 检查 inter 1000 后端 service2.domain.com_ipvANY 模式http 编号 104 登录全局 超时连接 30000 超时服务器 30000 重试 3 选项 httpchk GET / 服务器 seafile-vm-02 10.100.10.103:8082 id 103 检查 inter 1000

如果有人能指出正确的方向,我真的很高兴,提前谢谢你,如果你需要更多信息,请告诉我。

最好的问候,

生物眼

【问题讨论】:

  • 这个问题似乎与Server Fault 更相关。也许版主可以移动它?

标签: linux reverse-proxy haproxy pfsense seafile-server


【解决方案1】:

在 reddit 上一位很棒的用户的帮助下,我解决了我的问题。

第一个问题是我的前端配置错误,因此有 3 个 default_backends。这就是为什么每个服务都指向同一个虚拟机的原因。为了解决这个问题,我只需要添加与我的 ACL 名称相对应的 if 条件。

第二个问题是我的 Service2 在 HAProxy 统计页面上显示为 DOWN。我不得不将健康检查方法从 HTTP 更改为 Basic,最终解决了所有问题。

这是工作配置:

# Automaticaly generated, dont edit manually.
# Generated on: 2018-10-02 16:59
global
    maxconn         1000
    stats socket /tmp/haproxy.socket level admin 
    gid         80
    nbproc          1
    hard-stop-after     15m
    chroot              /tmp/haproxy_chroot
    daemon
    tune.ssl.default-dh-param   8192
    server-state-file /tmp/haproxy_server_state
    ssl-default-bind-ciphers TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:TLS13-CHACHA20-POLY1305-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
    ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
    ssl-default-server-ciphers TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:TLS13-CHACHA20-POLY1305-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
    ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets

listen HAProxyLocalStats
    bind 127.0.0.1:2200 name localstats
    mode http
    stats enable
    stats admin if TRUE
    stats show-legends
    stats uri /haproxy/haproxy_stats.php?haproxystats=1
    timeout client 5000
    timeout connect 5000
    timeout server 5000

frontend shared-frontend-merged
    bind            X.X.X.X:443 name X.X.X.X:443   ssl crt-list /var/etc/haproxy/shared-frontend.crt_list  
    mode            http
    log         global
    option          http-keep-alive
    option          forwardfor
    acl https ssl_fc
    http-request set-header     X-Forwarded-Proto http if !https
    http-request set-header     X-Forwarded-Proto https if https
    timeout client      30000
    http-response set-header Strict-Transport-Security max-age=15768000
    acl         aclcrt_shared-frontend  var(txn.txnhost) -m reg -i ^([^\.]*)\.domain\.com(:([0-9]){1,5})?$
    acl         ACL1    var(txn.txnhost) -m beg -i test.domain.com
    acl         ACL2    var(txn.txnhost) -m beg -i service1.domain.com
    acl         ACL3    var(txn.txnhost) -m beg -i service2.domain.com
    http-request set-var(txn.txnhost) hdr(host)
    use_backend test.domain.com_ipv4  if  ACL1 
    use_backend service1.domain.com_ipvANY  if  ACL2 
    use_backend service2.domain.com-seafhttp_ipvANY  if  ACL3 

frontend http-to-https
    bind            X.X.X.X:80 name X.X.X.X:80   
    mode            http
    log         global
    option          http-keep-alive
    timeout client      30000
    http-request redirect scheme https 

backend test.domain.com_ipv4
    mode            http
    id          10100
    log         global
    timeout connect     30000
    timeout server      30000
    retries         3
    source ipv4@ usesrc clientip
    option          httpchk GET / 
    server          testvm-server01 10.100.10.101:54080 id 10101 check inter 1000  

backend service1.domain.com_ipvANY
    mode            http
    id          102
    log         global
    timeout connect     30000
    timeout server      30000
    retries         3
    option          httpchk GET / 
    server          seafile-vm-01 10.100.10.103:8000 id 101 check inter 1000  

backend service2.domain.com-seafhttp_ipvANY
    mode            http
    id          104
    log         global
    timeout connect     30000
    timeout server      30000
    retries         3
    server          seafile-vm-02 10.100.10.103:8082 id 103 check inter 1000

更多详情:https://www.reddit.com/r/PFSENSE/comments/9kezl3/pfsense_haproxy_reverse_proxy_with_multiple/?st=jmruoa9r&sh=26d24791

TLDR:我错误地配置了我的操作表并且进行了错误的运行状况检查。

您好,

生物眼

【讨论】:

    猜你喜欢
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多