nginx代理後,獲取request的ip

應用程序部署上線,通常都會用nginx之類的來進行反向代理,而不是直接訪問tomcat之類的容器.nginx

這時候若是用平時的獲取ip的代碼,就只會獲取到nginx所在服務器的ip, 就失去了自己的意義.apache

今天就來配置下 nginx+tomcat 後,  程序獲取ip和 tomcat的訪問日誌localhost_access_log 獲取ip. tomcat

1.首先要在nginx中加個配置,即把用戶ip保存下來服務器

在nginx的配置文件中增長 spa

proxy_set_header X-real-ip           $remote_addr;

各位置要注意, 能夠放在 location / 中, 若是你配置了.do, .action的轉發, 那就要放在 .do,.action的配置中代理

2.修改程序中獲取ip的方法,先取 X-real-ip的值日誌

    private String getIpAddr(HttpServletRequest request) {
        String ip = request.getHeader("X-real-ip");//先從nginx自定義配置獲取
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("x-forwarded-for");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }

3.修改tomcat的日誌配置,記錄訪問的來源ipcode

在server.xml中,修改AccessLogValve的配置以下server

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%{yyyy-MM-dd HH:mm:ss}t %{X-real-ip}i "%r" %s %b %{User-Agent}i" />
相關文章
相關標籤/搜索