我正在尝试为 haproxy 构建一个 reg exp,它将匹配第二个 URL 并将其定向到与第一个不同的 acl:
mysite.com/path/
mysite.com/path/something_random
Run Code Online (Sandbox Code Playgroud)
问题是我的第一个 reg exp 匹配上面的两个 url,而它应该只匹配第二个。我也找不到关于 haproxy regex 格式的更多文档,所以我什至不确定在哪里引用我应该用于匹配的 reg exp 格式。reg exp pro 可以帮助我吗 我是新手,谢谢。
acl filebrowser_route path_reg ^/path/.*
acl filebrowser url_beg /path
Run Code Online (Sandbox Code Playgroud) 我使用以下配置来终止 SSL,以便我可以检查请求、进行 URL 重写、ACL 等,然后将 SSL 流量转发回我的后端服务器。但是,我无法坚持工作。当我只使用“模式 tcp”并执行直接的 tcp 路由时,我可以粘着工作,但是一旦我开始在前端终止 SSL,粘性就会停止工作。
这是我的配置:
frontend https-forward
bind *:443 ssl crt /etc/haproxy/certs.d/combo.pem
option http-server-close
option forwardfor
reqadd X-Forwarded-Proto:\ https
reqadd X-Forwarded-Port:\ 443
capture request header Referrer len 64
capture request header Content-Length len 10
capture request header User-Agent len 64
# set HTTP Strict Transport Security (HTST) header
rspadd Strict-Transport-Security:\ max-age=15768000
# some ACLs and URL rewrites...
default_backend backstuff
backend backstuff
log 127.0.0.1 local2 notice
balance roundrobin
option ssl-hello-chk
stick-table type binary len …Run Code Online (Sandbox Code Playgroud) 我在为在两个不同服务器上设置的几个网站设置 Let's Encrypt 时遇到一些问题,并通过 HAProxy 将流量分配给它们。
服务器上有许多 VHosts/域,所有这些都需要 SSL 证书。为了这篇文章,让我们说他们是:
这两个 A 记录都设置有两个 IP 地址。我可以通过 nwtools.com 或 nslookup 验证 A 记录foo.some-site.com和bar.some-site.com解析相同的两个 IP 地址。而且我知道 Let's Encrypt 要求 vhost 使用有效记录,以便它可以进行查找。
我计划在两台服务器上为所有虚拟主机运行 Lets Encrypt 设置,其中一台运行良好,但是当我转到第二台时,出现错误:
[root@server httpd]# /opt/letsencrypt/letsencrypt-auto --apache -d foo.some-site.com
Checking for new version...
Requesting root privileges to run letsencrypt...
/root/.local/share/letsencrypt/bin/letsencrypt --apache -d foo.some-site.com
Failed authorization procedure. foo.some-site.com (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Failed to …Run Code Online (Sandbox Code Playgroud) 似乎在为 HTTPS 连接上的主机名路由配置 HAProxy 时,包含一个tcp-request inspect-delay指令“让 HAProxy 有机会查看连接”至关重要。有没有办法让 NGINX 达到同样的效果,还是我应该开始打包并将我的整个服务器移动到 HAProxy?
(作为参考,这个问题来自我之前在这里表达的误解)
编辑
迈克尔,在评论中:
他似乎想在不实际终止 TLS 连接的情况下从客户端的握手尝试中“嗅探”SNI,以便做出下层连接代理决策,并盲目地将有效负载传送到后续机器以终止 TLS,因为对于出于某种原因,他不希望代理上的 TLS 证书和密钥,或者让代理根本不执行 TLS——只需嗅探 SNI 并使用从其内容派生的规则建立向内 TCP 连接。
理由是我需要后端应用程序中的证书和密钥(有些出于某种原因需要这样做),所以我必须向他们提供这些。必须在代理中设置它们本质上会使维护工作和出错的机会加倍。如果我可以不维护对代理的证书的访问权限,这将使我的架构更容易,并减少出错的机会。
我无法让Haproxys http-buffer-request 选项工作。我正在使用 Haproxy 1.6.5。这是我的配置:
global
maxconn 20000
debug
defaults HTTP
mode http
option http-buffer-request # buffer the whole request before dispatching it to the backend
timeout connect 5s
timeout client 50s
timeout server 50s
frontend http
bind 127.0.0.1:8123
use_backend api.radioadmin_backend if { hdr(host) -i api.radioadmin.local:8123 }
use_backend radioadmin_backend if { hdr(host) -i radioadmin.local:8123 }
backend api.radioadmin_backend
mode http
server api.radioadmin3000 127.0.0.1:3000 check
backend radioadmin_backend
mode http
server radioadmin3001 127.0.0.1:3001 check
Run Code Online (Sandbox Code Playgroud)
但是,请求不会在 Haproxy 中缓冲,而是直接发送到应用程序:
我正在使用 Unicorn 运行 Ruby …
服务器启动时访问服务器的原因是什么?
我已经rhc tail在我的应用程序上运行以监控新日志。
这是我的日志 http://laravel.io/bin/Dez4o
当我开始使用应用程序时 rhc app-start
app-root/logs/php-fpm-error.log
[26-Jul-2016 21:53:00] NOTICE: [pool www] 'user' directive is ignored
when FPM is not running as root
[26-Jul-2016 21:53:00] NOTICE: [pool www] 'group' directive is ignored
when FPM is not running as root
[26-Jul-2016 21:53:00] NOTICE: fpm is running, pid 33590
[26-Jul-2016 21:53:00] NOTICE: ready to handle connections
Run Code Online (Sandbox Code Playgroud)
app-root/logs/haproxy.log
[WARNING] 207/215259 (33493) : config : log format ignored for proxy 'stats' since it has no log address.
[WARNING] 207/215259 (33493) …Run Code Online (Sandbox Code Playgroud) 正如标题所暗示的,我有一个 AWS API Gateway 端点,我想将它放在 HAProxy 后面。
这是我当前的 HAProxy 配置
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen http
bind 127.0.0.1:8080
maxconn 18000
acl api_gateway path_beg /api-gateway
use_backend api-gateway-backend if api-gateway
backend api-gateway-backend
http-request set-header Host xxxxx.execute-api.ap-southeast-2.amazonaws.com
server api-gateway xxxxx.execute-api.ap-southeast-2.amazonaws.com:443
Run Code Online (Sandbox Code Playgroud)
当我点击/api-gatewayHAProxy 上的端点时,我得到400 …
frontend front
bind *:80
bind *:443 ssl crt /etc/haproxy/certs/server.pem ca-file /etc/haproxy/certs/id.crt verify required
option tcplog
mode http
default_backend app
backend app
balance roundrobin
cookie SERVERID insert
option ssl-hello-chk
mode http
option httpclose
option forwardfor
option httpchk get /WebApi/help
server app1 1.1.1.1:443 check ssl fall 1 rise 3 verify none cookie webA
server app2 1.1.1.2:443 check ssl fall 1 rise 3 verify none cookie webB
Run Code Online (Sandbox Code Playgroud)
对于某些页面/登录名/身份证,我需要要求客户端证书并将其发送到后端(IIS),后者将使用它进行身份验证,我找不到在某些路径上询问证书的方法,并且证书转发到后端也不起作用,以前config 正在使用“mode tcp”,它将所有内容转发到 IIS 并且它正在工作,但我需要使用“acl”将具有特定路径的请求转发到另一台服务器,但“acl”在 https 中不起作用,因此它应该是 http
昨天,我们受到了到达我们的网络服务器后端 (apache2) 的 DDoS 攻击。前端由到网络服务器的 haproxy 负载平衡连接组成。在 apache 的 access.log 上,我们看到来自两个 ip 的数千个请求,几个小时后我们意识到那些是假的/欺骗的,而不是实际的 ip。
为澄清起见,我们使用“137.137.136.136”的 ip 进行了“curl GET /”,实际上这就是我们在博客中看到的 ip(假的)
现在,在我们使用 nginx 作为反向代理的另一个集群中,更改/制作 X-Forwarded-For 标头不起作用。意思是,即使您在特定标头中输入随机 ip,nginx 仍会将正确的 ip 传递给后端网络服务器?
这与haproxy有关吗?
任何人都可以确认精心制作的 X-Forwarded-For 标头可以通过 haproxy 吗?
为什么这不会发生在 nginx 中?
你如何防止这种情况?
这是我在服务器故障中的第一篇文章,所以我很抱歉任何失礼:)
问题:当我尝试访问充当 WAF 的 apache 背后的“ http://dummy_server/wp-admin ”时,它陷入无限重定向循环。
HAProxy 和 WAF 的完整配置可以在这里找到https://www.haproxy.com/blog/scalable-waf-protection-with-haproxy-and-apache-with-modsecurity/
对于我可以调查的内容,如果我在对 dummy_server/wp-admin 执行 GET 操作时在关闭 apache VH(即仅使用 HA 代理)的同时访问 dummy_server,则服务器会响应
HTTP/1.1 302 Found
Date: Wed, 20 Feb 2019 19:00:49 GMT
Location: https://dummy_server/wp-login.php?redirect_to=.....
Run Code Online (Sandbox Code Playgroud)
然后浏览器重定向到 dummy_server/wp-login 并等待用户凭据。
尽管如此,如果我在激活 WAF 的情况下对 dummy_server 执行 GET,则Location标头将更改为
Location: https://dummy_server/wp-admin
Run Code Online (Sandbox Code Playgroud)
以及陷入重定向循环的过程。
如果我关闭 WAF 配置(我使用的是 modsecurity),则 apache 仅充当反向代理,但问题仍然存在。
下面是虚拟机配置:
<VirtualHost *:90>
<IfModule mod_security2.c>
Include /etc/apache2/owasp-modsecurity-crs/crs-setup.conf
SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess On
</IfModule>
ProxyPreserveHost On
ProxyRequests Off
ProxyVia Off
ProxyPass / http://192.168.57.22:81/
ProxyPassReverse / …Run Code Online (Sandbox Code Playgroud)