+86 189 8218 1436Mon. - Fri. 10:00-22:00

aws elb负载均衡下,Apache及Nginx上进行访问限制

aws elb负载均衡下,Apache及Nginx上进行访问限制

经济实惠的服务器代维费用及报价,让中小企业都能用上专业的服务器代维服务!

服务器代维外包服务 让您省心又放心 小程序HTTPS配置 一键ssl全站配置 正版EV OV_SSL证书 顶级证书长期享用 DDOS/CC攻击防御 有针对性的攻击防御
木马病毒清除 彻底的清除专家 网站中毒处理 快速网站故障处理专家 服务器故障处理 一站式解决服务器问题 数据找回/恢复 重要数据秒级找回
数据库优化 提升网站访问速度神器 数据迁移 网站搬家快方法 漏洞扫描/渗透测试 网站安全检测 网站故障排查/修复 一键排查故障/修复
宝塔Linux面板安装服务 环境配置专家 WordPress代维托管 一次性收费包您满意 网站程序安装指导 多年安装经验
肉鸡处理,中毒处理
肉鸡处理,中毒处理  
 

aws elb负载均衡下,Apache及Nginx上进行访问限制

AccessLimitBehindLoadblancer

架构Web系统时在负载均衡下运行多台Web服务器,无论是在物理环境还是在云端都是常见场景。在阿里云上实现同样的架构时使用SLB + ECS
实现,当SLB在Web系统前端时和在单台ECS上运行Web系统时有些差异。

例如Web服务器识别的访问源IP地址就不同,SLB + ECS架构时Web服务器识别到的访问源IP地址(客户端地址)将会是SLB内网IP地址。而访问源IP地址将会被添加到X-Forwarded-For的末尾。虽然X-Forwarded-For不是RFC规定内容,而在使用代理或者负载均衡服务时的实际标准。

Apache上的访问限制

在Apache2.2里使用mod_setenvif模块进行,指定IP地址的访问限制。

<Location />
  # 禁止所有客户端的访问
  Order Allow,Deny
  Allow from all
</Location>
 
<Location /site_b>
  SetEnvIf X-Forwarded-For "192\.168\.0\.0.*" allowed_ip
 
  # 仅允许指定IP访问
  Order Deny,Allow
  Deny from all
  Allow from env=allowed_ip
</Location>

接下来介绍一下在Apache2.4上进行访问限制的方法。Apache2.4里使用mod_remoteip模块,在Amazon Linux的httpd24包默认激活的状态。该模块提供的RemoteIPHeader指令,确认X-Forwarded-For内容并让Apache识别为访问源IP地址(客户端IP)。利用该模块可简单的进行访问限制。

# 把X-Forwarded-For设定为访问源IP(客户端IP)
RemoteIPHeader X-Forwarded-For
 
<Location />
  # 允许所有客户端的访问
  Require all granted
</Location>
 
<Location />
  # 仅允许指定的IP地址访问
  Require ip 192.168.0.0
</Location>

Nginx上的访问限制

在Nginx上使用ngx_http_map_module模块 $http_x_forwarded_for 进行访问限制,nginx.conf上的设定如下。

map $http_x_forwarded_for $allowed {
    default deny;
    ~\s*192.168.0.0$ allow;
    ~\s*8.8.8.*$   allow;
}

location / {
    if ( $allowed = "deny" ) { return 403; }
    alias /path/to/document_root
}

ngx_http_map_module

小结

阿里云的SLB是一个简单易用的负载均衡器,可使用“加权轮询”、“加权最小连接数”、“轮询”分配方式。

在负载均衡下配置Web服务器时,访问日文文件里记录获取访问源IP(客户端IP)时,也使用 X-Forwarded-For 信息。

比如在SLB下运行Nginx时,获取访问源IP地址时也需添加 $http_x_forwarded_for。

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" $request_time';
北京 上海 天津 重庆 河北 山东 辽宁 黑龙江 吉林 甘肃 青海 河南 江苏 湖北 湖南 江西 浙江 广东 云南 福建 海南 山西 四川 陕西 贵州 安徽 广西 内蒙古 西藏 新疆 宁夏 澳门 香港 台湾