鍍金池/ 問答/Linux/ 服務器怎么獲取客戶端ip地址?

服務器怎么獲取客戶端ip地址?

現(xiàn)在網(wǎng)站前端用vue寫的,客戶端訪問服務器通過nginx轉發(fā)到vue頁面,vue頁面再訪問tomcat服務器,實際上是vue頁面向tomcat發(fā)請求,這時,tomcat拿到的客戶端的IP地址就是vue頁面請求地址,最后拿到127.0.0.1。請問這種情況怎么拿到客戶端的真實ip地址?

回答
編輯回答
不將就
一般nginx要獲取真實ip需要location段加上
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
當然也要視實際情況而定
2018年9月13日 11:11
編輯回答
落殤

不應該是客戶端請求nginx拿到vue頁面,然后vue頁面再請求nginx,然后ngix將請求轉發(fā)到tomcat,tomcat返回數(shù)據(jù)嗎?vue直接透過nginx訪問tomcat這樣不好吧。

上面的大兄弟說了nginx的配置。我提供下java中獲取ip地址代碼,參考下:

public static String getIpAddr(HttpServletRequest request) {  
        String 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.getHeader("HTTP_X_FORWARDED_FOR");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)||ip.startsWith("10.")) {  
            ip = request.getRemoteAddr();  
        }  
        return ip;  
    }  
2017年12月14日 16:50