请问通过haproxy获取客户端的端口号,而非代理端口号!

发布于 2021-11-25 18:07:10 字数 3008 浏览 762 评论 7

现在项目中要求获取客户端请求的端口,但应用部署是通过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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

把昨日还给我 2021-11-29 22:08:48

如果你是用HTTP模式,很好办啊,如果官方不支持这个功能的话。

官方不是有reqadd这个选项么,你自定义一个,然后修改源码解析这个规则

从haproxy的session里获取客户端的端口就好了。

session里有客户端的IP和端口,服务器的IP和端口。

------------如果官方已经支持了记得告诉我哈。

岁吢 2021-11-29 19:58:37

回复
咕~~(╯﹏╰)b,安装配置会的,我只是想看看你那个全部配置,怎么实现把端口传递到后端的...

晚风撩人 2021-11-29 18:48:51

回复
不好意思,我以为你没安装过,你在配置项添加如下2个配置项: proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header remote_port $remote_port; JAVA中request.getHeader("remote_port")获取。

海之角 2021-11-29 18:20:23

回复
你可以参考下nginx的变量,这个比haproxy方便多了哈。

醉酒的小男人 2021-11-29 04:11:48

回复
proxy_set_header X-Forwarded-For $remote_addr;这个配置项是获取用户端的IP地址,proxy_set_header remote_port $remote_port;这个是配置的获取用户端的端口号的。

落墨 2021-11-28 21:43:29

回复
嗯...这些倒是知道的...不过先谢谢啦~

卸妝后依然美 2021-11-25 23:20:54

同问,我也遇到了相同的问题...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文