我已经使用
option forwardfor
选项,这样它就会通过 $_SERVER[“HTTP_X_FORWARDED_FOR”] 将用户的 IP 传递给 PHP。
如果页面请求不是 POST,则填充成功,但如果是 POST,则不会填充。您知道我哪里做错了吗?
感谢大家!
我的整个 HAProxy 配置文件供参考:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
user haproxy
group haproxy
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 4096
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm :80
mode http
balance roundrobin
option forwardfor
server webA 192.168.240.4 weight 1 maxconn 2048 check
server webB 192.168.240.3 weight 1 maxconn 2048 check
listen smtp :25
mode tcp
option tcplog
balance roundrobin
server smtp 192.168.240.4:25 check
答案1
来自HAProxy手册:
需要注意的是,只要 HAProxy 不支持保持连接,则只有连接的第一个请求才会收到标头。因此,使用此选项时,务必确保设置了“option httpclose”。
示例:# 同一台机器上的 stunnel 也使用公共 HTTP 地址前端 www 模式 http 选项 forwardfor except 127.0.0.1# stunnel 已经添加了标头
# Those servers want the IP Address in X-Client backend www mode http option forwardfor header X-Client
另请参阅:“选项 httpclose”
因此,您可以尝试 httpclose 选项,但我会在下班后或在测试中尝试它,以免性能下降?