nginx通过x_forwarded_for实现黑白名单访问策略

nginx 通过负载均衡,防火墙 过来之后, remote_addr 的地址是防火墙的地址, 客户端的真实地址是在 x_forwarded_for中的, 这样nginx默认的 deny 和 allow 就不生效了, 我们需要在每个域名中判断一个 x_forwarded_for中是否有我们要拒绝的ip地址, 如果有就返回403.

定义一个map 拒绝的ip地址列表

1
2
3
4
5
6
7
 vim x_forwarded_for_deny.conf

map $http_x_forwarded_for $allowed {
default allow;
#~s*192.168.0.100$ deny; # 拒绝一个IP地址
#~s*192.168.0.d+$ deny; # 拒绝一个网段IP地址
}

每个域名中的location中添加如下判断

1
2
3
4
5
6
7
8
server {
listen 80;
server_name ....;
location / {
if ( $allowed = "deny" ) { return 403; }
proxy_pass .....;
}
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!