Nginx限制目录访问

2个月之前部署的一套客户的项目,使用了lvs+nginx+tomcat做了集群,一共5台,效果不错,只是nginx配置起来稍显麻烦。
今天突然提出了一个问题,由于项目是放在公网,为了配合安全审计和自身的安全考虑,要限制站点中的后台管理页面只能允许被某几个IP访问,客户提出了解决方案貌似没看懂。。。要我们帮忙评估。。。
好吧,据我所知的有几种,无非在TCP/IP协议中的某一层做策略,比如可在4、7层做限制,比如硬件负载均衡器、防火墙等等;比如手头的这个软件伪集群(用不起radware\f5啥的),直接在nginx处理吧。
配置如下:
location ~* /admin/.*\.(action|jsp)?$ {
                proxy_pass  http://tomcat;
                root   /opt/tomcat/service;
                index  index.jsp index.html index.htm;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header  X-Real-IP  $remote_addr;
                proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_next_upstream http_502 http_503 http_504 error timeout invalid_header;
                proxy_cache nginx_cache;
                proxy_cache_key $host$uri$is_args$args;
                proxy_cache_valid  200 302 10m;
                proxy_cache_valid  301 1h;
                proxy_cache_valid  any 1m;
                proxy_temp_path /opt/nginxtemp;
                allow 192.168.1.23;
                allow 192.168.2.20;
                deny all;
}    

上述配置的意思是限制http://host/admin/这个页面只允许被192.168.1.23、192.168.2.20两个IP来访问。

2012.7.16更新
配置了上述参数之后,存在着session丢失的问题,后来稍微做了调整,主要是参数配置所在的位置:

 location /
        {
                proxy_pass  http://tomcat;
                #root /opt/pthsh/service/WEB-INF/jsp;
                root   /opt/pthsh/service;
                index  index.jsp index.html index.htm;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_set_header  X-Real-IP  $remote_addr;
                proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_next_upstream http_502 http_503 http_504 error timeout invalid_header;
                proxy_cache nginx_cache;
                proxy_cache_key $host$uri$is_args$args;
                proxy_cache_valid  200 302 10m;
                proxy_cache_valid  301 1h;
                proxy_cache_valid  any 1m;
                proxy_temp_path /opt/nginxtemp;
        }


location ~* /admin/.*\.(action|jsp)?$ {
      proxy_pass http://tomcat;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      allow IP1;
      allow IP2/8;
      allow IP3;
      deny all;
}
    location ~* .*\.(action|jsp)?$
     {
      proxy_pass http://tomcat;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

2012.8.22更新
配置成:
location =/admin/login.action {
上述参数之后,存在着在IP(非法IP)切换之后还能保持会话的问题,改成如下解决:
location ~* /admin/ {
这样就保证了正则匹配过滤了。

-The End-
### 如何配置 Nginx限制请求速率或带宽 #### 使用 `limit_req` 和 `limit_conn` 指令来限制请求速率 为了实现对特定 URL 或整个站点的请求速率限制,可以使用 `limit_req_zone` 定义一个区域并指定键(通常是客户端 IP 地址),以及每秒允许的最大请求数量。随后通过 `limit_req` 来应用这些设定。 ```nginx http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { location /search/ { limit_req zone=one burst=5 nodelay; } } } ``` 此配置创建了一个名为 "one" 的共享内存区,大小为 10MB,用来存储来自 `$binary_remote_addr` 变量表示的不同地址的状态信息,并设定了默认情况下每个地址每秒钟最多处理一次请求的速度限制[^4]。 #### 控制上传下载速度 对于希望控制单个连接的数据传输率的情况,则应采用 `proxy_limit_rate` 指令。这适用于作为反向代理运行时想要调节发往上游服务器数据流的情形;而对于直接响应给最终用户的静态文件或其他内容来说,应该利用 `limit_rate` 参数来进行调整。 ```nginx location ~* \.(mp4|flv)$ { limit_rate_after 10m; # 开始限速前先传送多少字节的数据 limit_rate 256k; # 设置最大传输率为256KB/S } server { ... proxy_limit_rate 8k; # 对于所有被代理的内容都强制执行不超过8kbps的上行链路速度 } ``` 上述例子展示了如何针对视频类资源实施下载加速后的减速策略,同时也说明了怎样全局性地约束转发至后端服务的数据包发送频率[^2]。 #### 综合考量因素 在实际部署过程中,应当依据服务器硬件条件、应用程序特性及预计访问模式等因素合理规划各项参数值。如果阈值定得太高就起不到应有的保护作用;反之若太低又会干扰到合法用户的正常使用体验[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值