当前,我在服务器上使用HAProxy软件包使用pfSense,因为我可以通过GUI轻松配置它。
我将HAProxy配置为充当与本指南相对应的反向代理:https://blog.devita.co/pfsense-to-proxy-traffic-for-websites-using-pfsense/
SSL卸载就像一个魅力。我的问题是,当我在同一内部IP上有多个服务(开放端口)时,似乎无法正常工作。
示例:
我的用例是我正在尝试设置Seafile,它将Web GUI的端口号为8000,将文件服务器的端口号为8082。现在,我可以访问Web GUI,但不能上载,下载或共享文件。
我的配置:
#自动生成,请勿手动编辑。
#产生于:2018-09-29 19:24
全局
麦克斯康1000
统计套接字/tmp/haproxy.socket级别管理员
80岁
nbproc 1
硬停15m
chroot/tmp/haproxy_chroot
守护程序
tune.ssl.default-dh-param 8192
服务器状态文件/tmp/haproxy_server_state
ssl默认绑定(bind)密码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默认服务器密码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默认服务器选项no-sslv3 no-tlsv10 no-tlsv11 no-tls门票
听HAProxyLocalStats
绑定(bind)127.0.0.1:2200名称localstats
模式http
统计启用
统计管理员,如果为TRUE
统计显示传奇
stats uri/haproxy/haproxy_stats.php?haproxystats=1
超时客户端5000
超时连接5000
超时服务器5000
前端共享-前端合并
绑定(bind)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请求设置 header X-Forwarded-Proto http如果!https
HTTP请求设置 header X-Forwarded-Proto https(如果使用https)
超时客户端30000
http响应集 header 严格传输安全性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(主机)
default_backend test.domain.com_ipv4
default_backend service1.domain.com_ipvANY
default_backend service2.domain.com_ipvANY
前端HTTP到https
绑定(bind)X.X.X.X:80名称X.X.X.X:80
模式http
全局登录
选项http-keep-alive
超时客户端30000
HTTP请求重定向方案https
后端test.domain.com_ipv4
模式http
编号10100
全局登录
超时连接30000
超时服务器30000
重试3
源ipv4 @ usesrc clientip
选项httpchk GET/
服务器testvm-server01 10.100.10.101:54080 id 10101检查内部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检查内部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:我没有正确配置我的操作表,并进行了错误的健康检查。
问候,
生灵眼
关于linux - pfSense + HAProxy –在一个内部IP上具有多个服务的反向代理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52576325/