Authentication
在 HAProxy 中,僅對來自我的 LAN 外部的連接需要 HTTP 身份驗證
我已將 HAProxy 配置為需要對單個前端進行 HTTP 身份驗證。看起來像這樣
userlist Users group G1 user XXX password YYY frontend public bind :::80 v4v6 bind :::443 v4v6 ssl crt /etc/ssl/snakeoil.pem # Authentication acl ValidUser http_auth(Users) http-request auth realm mysite if !ValidUser option forwardfor except 127.0.0.1 use_backend othersite if { path_beg /othersite/ } default_backend thesite backend thesite acl needs_scheme req.hdr_cnt(X-Scheme) eq 0 reqrep ^([^\ :]*)\ /(.*) \1\ /\2 reqadd X-Scheme:\ https if needs_scheme { ssl_fc } reqadd X-Scheme:\ http if needs_scheme !{ ssl_fc } option forwardfor server thesite1 127.0.0.1:5000 errorfile 503 /etc/haproxy/errors/503-no-thesite.http backend othersite reqrep ^([^\ :]*)\ /othersite/(.*) \1\ /\2 server othersite1 127.0.0.1:8080 errorfile 503 /etc/haproxy/errors/503-no-othersite.http
現在我只想為來自 LAN 外部的連接請求 HTTP 身份驗證。
我試圖更換線路
http-request auth realm mysite if !ValidUser
和
http-request auth realm mysite unless ValidUser || { hdr_beg(host) -i 192.168.0. }
但這沒有用。
如何完成這項任務?
$$ edit $$
感謝這個問題(HAProxy basic auth except from specific IP),我的配置適用於一個特定的IP:
# Authentication acl ValidOctoPrintUser http_auth(Users) # Exclude one IP from Authentication acl InternalIP src 192.168.0.XXX http-request auth realm octoprint if !InternalIP !ValidOctoPrintUser
但是,我還不知道如何
192.168.0.
從身份驗證中排除所有 IP
hdr_beg(host) -i 192.168.0.
匹配Header,而不是客戶端的IP。你想用
src
,比如
acl allowed_ip src 192.168.0.0/24
src 按網路的 CIDR 匹配,因此您可以在需要時匹配整個網路
另請注意,您可以通過定義命名相同的規則來 OR 規則,所以說
acl allowed_ip src 192.168.1.0/24 acl allowed_ip src 192.168.5.0/24
將匹配來自 192.168.1.0/24 和 192.168.1.0/24 網路的 IP。
只有當您想要在標頭上執行此操作時,您前面有另一個代理並想要匹配 IP
X-Forwarded-For