nginx域名访问的白名单配置梳理

在日常运维工作中,会碰到这样的需求:设置网站访问只对某些ip开放,其他ip的客户端都不能访问。可以通过下面四种方法来达到这种效果:1)针对nginx域名配置所启用的端口(比如80端口)在iptables里做白名单,比如只允许100.110.15.16、100.110.15.17、100.110.15.18访问.但是这样就把nginx的所有80端口的域名访问都做了限制,范围比较大![root@china ~]# vim /etc/sysconfig/iptables......-A INPUT -s
摘要由CSDN通过智能技术生成

在日常运维工作中,会碰到这样的需求:设置网站访问只对某些ip开放,其他ip的客户端都不能访问。可以通过下面四种方法来达到这种效果:

先利用日志进行统计访问量

举例说明统计2021年13点25到14点25的日志最高访问量的前20个地址

sed -n '/2021:13:25/,/2021:14:25/p' access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -n 20

统计1分钟内访问超过100次的ip地址

#!/bin/bash

ago=`date -d "-1 min" "+%H:%M:%S"`
now=`date "+%H:%M:%S"`

sed -n "/$ago/,/$now/p" access.log | awk '{print $1}' | sort | uniq -c | sort -rn | awk '{if ($1 > 100) print $0}'

1)针对nginx域名配置所启用的端口(比如80端口)在iptables里做白名单,比如只允许100.110.15.16、100.110.15.17、100.110.15.18访问.但是这样就把nginx的所有80端口的域名访问都做了限制,范围比较大!

[root@china ~]# vim /etc/sysconfig/iptables
......
-A INPUT -s 100.110.15.16 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -s 100.110.15.17 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -s 100.110.15.18 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

2)如果只是针对nginx下的某一个域名进行访问的白名单限制,那么可以在nginx的配置文件里进行设置,利用$remote_addr参数进行访问的分发限制,如下:

[root@china vhosts]# cat testwww.wangshibo.com.conf 
server {
   
        listen       80;
        server_name  testwww.wangshibo.com;
        root /var/www/vhosts/testwww.wangshibo.com/httpdocs/main;


        access_log  /var/www/vhosts/testwww.wangshibo.
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Nginx配置域名白名单,你可以使用`ngx_http_access_module`或`ngx_http_map_module`模块。以下是两种不同的方法: **方法一:使用ngx_http_access_module模块** ```nginx http { ... # 定义域名白名单 map $http_host $is_allowed_domain { default 0; # 在这里添加你的白名单域名 example.com 1; subdomain.example.com 1; } server { listen 80; server_name example.com; location / { # 检查请求的域名是否在白名单中 if ($is_allowed_domain = 0) { return 403; } # 其他处理逻辑 ... } } } ``` 在上面的示例中,我们使用了`map`模块来定义一个名为`$is_allowed_domain`的变量,它根据请求的`$http_host`(即域名)来匹配白名单域名。默认值为0,表示不在白名单中。然后在`server`块中的`location /`中,我们使用了`if`语句来检查请求的域名是否在白名单中。如果不在白名单中,返回403 Forbidden错误页面。 **方法二:使用ngx_http_map_module模块** ```nginx http { ... # 定义域名白名单 map $http_host $is_allowed_domain { default 0; # 在这里添加你的白名单域名 example.com 1; subdomain.example.com 1; } server { listen 80; server_name example.com; location / { # 检查请求的域名是否在白名单中 if ($is_allowed_domain) { # 其他处理逻辑 ... } else { return 403; } } } } ``` 在这种方法中,我们使用了`map`模块来定义一个名为`$is_allowed_domain`的变量,它根据请求的`$http_host`(即域名)来匹配白名单域名。默认值为0,表示不在白名单中。然后在`server`块中的`location /`中,我们使用了`if`语句来检查请求的域名是否在白名单中。如果在白名单中,可以继续处理其他逻辑;如果不在白名单中,返回403 Forbidden错误页面。 无论你选择哪种方法,都需要将示例配置中的白名单域名替换为你自己的实际域名。你可以根据需要添加更多的域名白名单中。 请注意,这些只是简单的域名白名单配置示例。在实际使用中,你可能还需要考虑其他安全性和性能方面的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值