首頁 > 軟體

nginx設定IP白名單的詳細步驟

2022-12-27 14:00:51

分析nginx存取紀錄檔,有哪些IP存取過nginx。

命令參考:awk '{print $1}' logs/access.log | sort | uniq -c | sort -nr -k1

輸出的效果案例:

1053 192.168.3.15
893 192.168.3.10
818 192.168.0.8

1、新增IP白名單檔案

在nginx目錄的 conf 中新增檔案 ip.conf注意白名單檔案不用新增任何註釋,可以有空行

vi ip.conf

192.168.3.11 1;

192.168.3.10 1;
192.168.0.112 1;

2、設定nginx.conf

編輯http節點:

http {
    # ...
    # geo IP whitelist
    geo $remote_addr $ip_whitelist {
       default 0;
       include ip.conf;
    }
 
    # ...
}

編輯server節點:

server {
    listen       80;
    # ...
    # IP whitelist
    set $whitelist_flag 1;
    if ( $ip_whitelist != 1 ) {
       set $whitelist_flag "${whitelist_flag}0";
    }
    if ( $request_uri !~* '/warn_navigate_page' ) {
       set $whitelist_flag "${whitelist_flag}0";
    }
    if ( $whitelist_flag = "100" ) {
       #return 403;
       rewrite ^(.*)$ $scheme://$host:$server_port/warn_navigate_page break; #白名單的提示頁面
    }
 
    # ...
}

也可以在location節點中編輯,範例:

編輯location節點:

location /test {
    proxy_pass  http://IP/test;
    # ...
    # IP whitelist
    set $whitelist_flag 1;
    if ( $ip_whitelist != 1 ) {
            set $whitelist_flag "${whitelist_flag}0";
    }
    if ( $request_uri !~* '/warn_navigate_page' ) {
            set $whitelist_flag "${whitelist_flag}0";
    }
    if ( $whitelist_flag = "100" ) {
            #return 403;
            rewrite ^(.*)$ $scheme://$host:$server_port/warn_navigate_page break; #白名單的提示頁面
    }
 
    # ...
}

新增導航的提示頁 /warn_navigate_page

server {
    listen       80;
    # ...
 
 
    # 白名單的提示導航頁面
    location /warn_navigate_page {
       	root /home/java/nginx/bizapp/warn_navigate_page;
        index  warn_navigate_page.html warn_navigate_page.htm;
        rewrite ^(.*)$ /warn_navigate_page.html break;
    }
}

3、編輯白名單的提示導航頁面

/home/java/nginx/bizapp/warn_navigate_page 中編輯頁面warn_navigate_page.html

參考:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
    <meta content="yes" name="apple-mobile-web-app-capable">
    <meta content="black" name="apple-mobile-web-app-status-bar-style">
    <meta content="telephone=no" name="format-detection">
    <meta content="email=no" name="format-detection">
    <title>系統通知</title>
    <style type="text/css">
        body {
            background: url(https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png) no-repeat;
            background-size: 100% 100%;
            background-attachment: fixed;
        }
    </style>
</head>

<body>
    <div>
        <pre>                                                                                     【通知公告】
        尊敬的使用者您好,系統已不提供IP地址直接存取,請聯絡管理員新增白名單。網際網路的域名存取地址:<a href="https://www.baidu.com">跳轉https://www.baidu.com</a>
        </pre>
    </div>

</body>
<script type="text/javascript">
</script>

</html>

預計效果圖

補充:新增白名單後nginx報錯:

nginx: [warn] low address bits of 45.11.55.132/28 are meaningless in /opt/openresty/nginx/conf/public/white.conf:69
nginx: [warn] low address bits of 12.70.12.195/28 are meaningless in /opt/openresty/nginx/conf/public/white.conf:70

解決方法:

錯誤原因是因為子網劃分錯誤,比如 45.11.55.132/28,每個子網有16個ip,所以起始ip一定要是16的倍數,

這個子網應該寫成這樣45.11.55.128/28,修改完畢後再reload nginx就不會報錯了。

總結 

到此這篇關於nginx設定IP白名單的文章就介紹到這了,更多相關nginx設定IP白名單內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com