作者个人研发的在高并发场景下, 提供的简单, 稳定, 可扩展的延迟消息队列框架, 具有精准的定时任务和延迟队列处理功能. 自开源半年多以来, 已成功为十几家中小型企业提供了精准定时调度方案, 经受住了生产环境的考验. 为使更多童鞋受益, 现给出开源框架地址: https://github.com/sunshinelyz/mykit-delay
写在前面
Nginx 不仅仅只是一款反向代理和负载均衡服务器, 它还能提供很多强大的功能, 例如: 限流, 缓存, 黑白名单和灰度发布等等. 在之前的文章中, 我们已经介绍了 Nginx 提供的这些功能. 今天, 我们来介绍 Nginx 另一个强大的功能: 禁用 IP 和 IP 段.
禁用 IP 和 IP 段
Nginx 的 ngx_http_access_module 模块可以封配置内的 ip 或者 ip 段, 语法如下:
- deny IP;
- deny subnet;
- allow IP;
- allow subnet;
- # block all ips
- deny all;
- # allow all ips
- allow all;
如果规则之间有冲突, 会以最前面匹配的规则为准.
配置禁用 ip 和 ip 段
下面说明假定 nginx 的目录在 / usr/local/nginx/.
首先要建一个封 ip 的配置文件 blockips.conf, 然后 vi blockips.conf 编辑此文件, 在文件中输入要封的 ip.
- deny 1.2.3.4;
- deny 91.212.45.0/24;
- deny 91.212.65.0/24;
然后保存此文件, 并且打开 nginx.conf 文件, 在 http 配置节内添加下面一行配置:
include blockips.conf;
保存 nginx.conf 文件, 然后测试现在的 nginx 配置文件是否是合法的:
/usr/local/nginx/sbin/nginx -t
如果配置没有问题, 就会输出:
- the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
- configuration file /usr/local/nginx/conf/nginx.conf test is successful
如果配置有问题就需要检查下哪儿有语法问题, 如果没有问题, 需要执行下面命令, 让 nginx 重新载入配置文件.
/usr/local/nginx/sbin/nginx -s reload
仅允许内网 ip
如何禁止所有外网 ip, 仅允许内网 ip 呢?
如下配置文件
- location / {
- # block one workstation
- deny 192.168.1.1;
- # allow anyone in 192.168.1.0/24
- allow 192.168.1.0/24;
- # drop REST of the world
- deny all;
- }
上面配置中禁止了 192.168.1.1, 允许其他内网网段, 然后 deny all 禁止其他所有 ip.
格式化 nginx 的 403 页面
如何格式化 nginx 的 403 页面呢?
首先执行下面的命令:
cd /usr/local/nginx/html
vi error403.HTML
然后输入 403 的文件内容, 例如:
- <HTML>
- <head>
- <title>
- Error 403 - IP Address Blocked
- </title>
- </head>
- <body>
- Your IP Address is blocked. If you this an error, please contact binghe
- with your IP at test@binghe.com
- </body>
- </HTML>
如果启用了 SSI, 可以在 403 中显示被封的客户端 ip, 如下:
Your IP Address is <!--#echo var="REMOTE_ADDR" --> blocked.
保存 error403 文件, 然后打开 nginx 的配置文件 vi nginx.conf, 在 server 配置节内添加下面内容.
- # redirect server error pages to the static page
- error_page 403 /error403.HTML;
- location = /error403.HTML {
- root HTML;
- }
然后保存配置文件, 通过 nginx -t 命令测试配置文件是否正确, 若正确通过 nginx -s reload 载入配置.
本文转载自微信公众号「冰河技术」, 可以通过以下二维码关注. 转载本文请联系冰河技术公众号.
来源: http://www.tuicool.com/articles/fyIRVf6