主機配置nginx后如何獲取訪問者IP


he你早的時候寫了一個根據訪問者ip查詢天氣的小接口,那時候還沒得買域名,沒有搞nginx,測試自然沒有問題,然后隨着一個小工具一塊上線了,今天突然發現我的小工具有好幾個人在使用了,就想寫一個記錄訪問者ip和請求次數的東西,經過一番折騰代碼寫完了,上了環境,可是我自己訪問的時候拿到的確是我主機的ip,尷尬,突然就想起之前寫的天氣那個接口GG了,果不其然,獲取的同樣是我自己主機的ip,這才想到會不會是nginx搞的鬼,然后請教了大佬,果然是:以下是修改方法

nginx反向代理后,在應用中取得的ip都是反向代理服務器的ip,取得的域名也是反向代理配置的url的域名,解決該問題,需要在nginx反向代理配置中添加一些配置信息,目的將客戶端的真實ip和域名傳遞到應用程序中。

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;  //獲取客戶端真實IP
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

 

 

java后台獲取訪問者ip的代碼:
/**
     * @return java.lang.String
     * @Description <獲取IP>
     * @Author Zhaiyt
     * @Date 9:59 2018/11/15
     * @Param [request]
     **/
    public static String getUserIp(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.getRemoteAddr();
        }
        if (ip.equals("0:0:0:0:0:0:0:1")) {
            ip = "127.0.0.1";
        }
        return ip;
    }

 

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM