目前大部分获取ip的方式:beat.getRequest().getRemoteAddr()
但是,如果通过nginx反向代理的话,就获取不到真实ip,是获取的nginx的ip
需要:添加 proxy_set_header X-Real-IP $remote_addr;
- server {
- listen 80;
- server_name price.kuche.com;
- location / {
- root html;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_pass http://price.kuche.com:8053;
- }
- }
添加一个表头声明
然后这样取
- public static String getRemoteAddrIp(HttpServletRequest request) {
- String ipFromNginx = getHeader(request, "X-Real-IP");
- System.out.println("ipFromNginx:" + ipFromNginx);
- System.out.println("getRemoteAddr:" + request.getRemoteAddr());
- return StringUtil.isEmpty(ipFromNginx) ? request.getRemoteAddr() : ipFromNginx;
- }
- private static String getHeader(HttpServletRequest request, String headName) {
- String value = request.getHeader(headName);
- return !StringUtils.isBlank(value) && !"unknown".equalsIgnoreCase(value) ? value : "";
- }