目前网站需要屏蔽一些特定的IP与特定来源的网友,禁止他们访问。例如一些外贸网站需要屏蔽国内IP,国内的屏蔽外国IP,阻止从某个特定网站过来的用户,比如从知乎的跳转链接访问站内资源链接就自动跳转到博客首页。这里写一种最简单快速的,不需要重新编译nginx的方法。
屏蔽指定IP访问
- 屏蔽命令
Nginx提供了两个最基本的屏蔽和允许IP的命令:deny 屏蔽、allow 允许
# 屏蔽单个IP
deny IP;
# 屏蔽所有IP
deny all;
# 屏蔽IP段
deny 123.0.0.1/16;
# 允许单个IP访问
allow IP;
# 允许全部
allow all;
# 允许IP段
allow 123.0.0.1/16;
- 指定目录
在 Nginx 的配置文件中,可以使用 location 块来匹配特定的 URL 路径。
比如我们想在 /foo 开头的 URL 路径中启用屏蔽- 匹配所有以 /foo 开头的 URL 路径,例如 /foo/bar 和 /foo/baz/qux 等
location /foo { deny 123.0.0.1/16; allow all; }
- 如果要精确匹配 /foo,要使用如下配置
location = /foo { deny 123.0.0.1/16; allow all; }
- 当然你也可以用正则匹配目录
location ~ ^/foo/[0-9]+$ { deny 123.0.0.1/16; allow all; }
屏蔽指定来源访问
比如我们想屏蔽abc.com和abc.net以及他们的子域名访问我们的网站
#阻止特定网站用户访问
if ($http_referer ~* "abc.(com|net)") {
return 403; }
屏蔽指定地区访问
有时候我们想只允许某些地区的用户可以访问我们的网站。知道上边两个方式,剩下的问题就是怎么得到某个地区的所有IP段了。我们可以从ip2location中获取。
- 访问ip2location
框左边选择城市,中间框选V4还是V6,右边选择规则类型,根据需要选择即可。
图中为:屏蔽印度的IPv4
然后点 DOWNLOAD下载即可,解压之后是一个txt 文件 -
删除最开始的 location / { 和最后的 } ,最后增加一行
allow all;
将后缀名从 .txt 改为 .conf 上传到服务器上,记住放置的目录。(比如/usr/local/nginx/conf/nginx.conf/firewall.conf)
-
修改站点对应的 Nginx 配置文件,比如 /foo 目录只允许非印度的IP访问
location /foo {
include /usr/local/nginx/conf/nginx.conf/firewall.conf;
}
这里示例是使用location字段指定子目录 ,
如果你想全站生效可以写到sever或者http字段,比如
server
{
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
include /usr/local/nginx/conf/nginx.conf/firewall.conf;
}
- 保存,重新加载 Nginx 配置文件即可。
sudo nginx -s reload
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END