请问通过haproxy获取客户端的端口号,而非代理端口号!
现在项目中要求获取客户端请求的端口,但应用部署是通过haproxy代理分发到服务端,在服务端java程序request.getRemotePort(),获取到的是代理上的端口。请教各位,如何通过配置haproxy.cfg或者其他方式获取到客户端的端口呢?不胜感激!
haproxy的配置文件内容如下:
global
daemon
maxconn 4096
nbproc 2
log 127.0.0.1 local0 info
pidfile ./haproxy.pid
defaults
mode http
option httplog
retries 3
option redispatch
option abortonclose
#option httpclose
#option forwardfor
#option transparent
maxconn 2000
timeout connect 5000
timeout client 50000
timeout server 50000
timeout check 2000
listen stats
bind 0.0.0.0:8208
mode http
log global
# stats refresh 30s
#transparent
#stats uri /haproxy-stats
stats uri /admin
stats realm Haproxy statistic
stats auth admin:admin
stats hide-version
frontend test
bind 0.0.0.0:8288
mode http
log global
option httpclose
option forwardfor
#option transparent
default_backend test_servers
errorfile 400 /usr/local/haproxy/errorfile/message_404.html
errorfile 403 /usr/local/haproxy/errorfile/message_404.html
errorfile 408 /usr/local/haproxy/errorfile/message_404.html
errorfile 500 /usr/local/haproxy/errorfile/message_500.html
errorfile 502 /usr/local/haproxy/errorfile/message_500.html
errorfile 503 /usr/local/haproxy/errorfile/message_500.html
errorfile 504 /usr/local/haproxy/errorfile/message_500.html
#####Notice Page##############
#errorfile 400 /usr/local/haproxy/errorfile/message.html
#errorfile 403 /usr/local/haproxy/errorfile/message.html
#errorfile 408 /usr/local/haproxy/errorfile/message.html
#errorfile 500 /usr/local/haproxy/errorfile/message.html
#errorfile 502 /usr/local/haproxy/errorfile/message.html
#errorfile 503 /usr/local/haproxy/errorfile/message.html
#errorfile 504 /usr/local/haproxy/errorfile/message.html
backend test_servers
mode http
balance source
#option httpchk HEAD /error404.shtml HTTP/1.0
#cookie SERVERID
#cookie SESSION_COOKIE insert indirect nocache
server server6 10.2.3.6:8080 weight 1 check inter 15000
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
如果你是用HTTP模式,很好办啊,如果官方不支持这个功能的话。
官方不是有reqadd这个选项么,你自定义一个,然后修改源码解析这个规则
从haproxy的session里获取客户端的端口就好了。
session里有客户端的IP和端口,服务器的IP和端口。
------------如果官方已经支持了记得告诉我哈。
回复
咕~~(╯﹏╰)b,安装配置会的,我只是想看看你那个全部配置,怎么实现把端口传递到后端的...
回复
不好意思,我以为你没安装过,你在配置项添加如下2个配置项: proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header remote_port $remote_port; JAVA中request.getHeader("remote_port")获取。
回复
你可以参考下nginx的变量,这个比haproxy方便多了哈。
回复
proxy_set_header X-Forwarded-For $remote_addr;这个配置项是获取用户端的IP地址,proxy_set_header remote_port $remote_port;这个是配置的获取用户端的端口号的。
回复
嗯...这些倒是知道的...不过先谢谢啦~
同问,我也遇到了相同的问题...