Logging
Pound、HAproxy 和 HAproxy 日誌記錄
我試圖弄清楚關於 HAproxy 日誌記錄的一件事。基本上,我們讓 Pound 在同一主機上的 HAproxy 前面執行,執行 SSL 終止,然後將請求傳遞給 HAproxy。我想弄清楚的是如何將 CLIENT 的 IP 記錄到 HAproxy 日誌中。目前,無論我做什麼,我都會將以下內容登錄到 HAproxy 日誌中:
Feb 27 19:37:00 localhost.localdomain haproxy[17365]: 127.0.0.1:44880 [27/Feb/2013:19:36:59.786] ssl_application ssl_application/app01 0/0/0/385/386 200 3470 - - ---- 0/0/0/0/0 0/0 "GET / HTTP/1.1"
我知道 127.0.0.1 是 Pound 代理對 HAproxy 的請求的 IP,但我想知道是否有任何方法可以讓實際的客戶端 IP 登錄到 HAproxy 日誌中。
磅配置如下所示:
User "www-data" Group "www-data" LogLevel 3 LogFacility local2 TimeOut 60 # poundctl control socket Control "/var/run/pound/poundctl.socket" ListenHTTPS Address 0.0.0.0 Port 443 Cert "/etc/pound/ssl/certificate.pem" # Allow PUT and DELETE also (by default only GET, POST and HEAD)?: xHTTP 1 Service BackEnd Address 127.0.0.1 Port 8080 End End End
HA 代理配置如下所示:
global log 127.0.0.1 local0 info log 127.0.0.1 local1 notice maxconn 4096 user haproxy group haproxy stats socket /var/run/haproxy.sock defaults log global mode http option httplog option dontlognull retries 3 redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 option httpclose option forwardfor # Set up application listeners here. listen application 0.0.0.0:80 acl health_check path_beg /health_check block if health_check option httpchk HEAD /health_check HTTP/1.1\r\nHost:\ staging.example.com balance roundrobin server app01 10.178.64.113:8000 weight 1 maxconn 100 check listen ssl_application 0.0.0.0:8080 acl health_check path_beg /health_check block if health_check option httpchk HEAD /health_check HTTP/1.1\r\nHost:\ staging.example.com balance roundrobin server app01 10.178.64.113:4430 weight 1 maxconn 100 check listen admin 0.0.0.0:22002 mode http stats uri /
任何建議將不勝感激!客戶端的 IP 必須隱藏在某處,因為它正在登錄到 HAproxy 後面的 Nginx。只需弄清楚如何將其記錄到 HAproxy 日誌中即可。
CMIIW,我從不使用 Pound,但如果您確定 Pound 能夠傳遞 http 標頭 x-forwarded-for,您只需在 HAproxy 偵聽部分添加“擷取請求標頭 x-forwarded-for len 15”(http:// code.google.com/p/haproxy-docs/wiki/capture_request_header)並確保還包括“選項 httplog”。
除了已經提到的 X-Forwarded-For 之外,您還可以使用 Tproxy 使整個事情變得透明:
這將需要 2 個子網,並且很難完成。