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

回媚一笑万夫倒 发布于 2013/05/07 17:58
阅读 1K+
收藏 1

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


加载中
0
mojie126
mojie126
同问,我也遇到了相同的问题...
mojie126
mojie126
回复 @回媚一笑万夫倒 : 嗯...这些倒是知道的...不过先谢谢啦~
回媚一笑万夫倒
回媚一笑万夫倒
回复 @mojie126 : proxy_set_header X-Forwarded-For $remote_addr;这个配置项是获取用户端的IP地址,proxy_set_header remote_port $remote_port;这个是配置的获取用户端的端口号的。
回媚一笑万夫倒
回媚一笑万夫倒
回复 @mojie126 : 你可以参考下nginx的变量,这个比haproxy方便多了哈。
回媚一笑万夫倒
回媚一笑万夫倒
回复 @mojie126 : 不好意思,我以为你没安装过,你在配置项添加如下2个配置项: proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header remote_port $remote_port; JAVA中request.getHeader("remote_port")获取。
mojie126
mojie126
回复 @回媚一笑万夫倒 : 咕~~(╯﹏╰)b,安装配置会的,我只是想看看你那个全部配置,怎么实现把端口传递到后端的...
下一页
0
强子1985
强子1985

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

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

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

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

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

返回顶部
顶部