gpt4 book ai didi

linux - pfSense + HAProxy – 一个内部 IP 上具有多个服务的反向代理

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:03 33 4
gpt4 key购买 nike

目前我在我的服务器上使用带有 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,它使用端口 8000 作为 Web GUI,使用端口 8082 作为文件服务器。现在我可以访问 Web GUI,但无法上传、下载或共享文件。

我的配置:

    # Automaticaly generated, dont edit manually.    # Generated on: 2018-09-29 19:24    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 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    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_ipvANY        mode    http        id    104        log    global        timeout connect    30000        timeout server    30000        retries    3        option    httpchk GET /         server    seafile-vm-02 10.100.10.103:8082 id 103 check inter 1000

如果有人能指出正确的方向,我将非常高兴,在此先感谢您,如果您需要更多信息,请告诉我。

最好的问候,

生物眼

最佳答案

在 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:我错误地配置了我的 Action Table,并进行了错误的健康检查。

问候,

生物眼

关于linux - pfSense + HAProxy – 一个内部 IP 上具有多个服务的反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52576325/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com