useragentinfo.com域名中午的时候,收到阿里云的邮件。说被用户举报,站点存在违规违法的内容。看后有些懵,怎么都没想出什么地方可能会存在问题。感觉大概率被个别公司举报了。
稍后在阿里云中工单提问原因,说电联回复,也一直没有结果。按照通常的逻辑思维,假定自己就存在问题,我该如何处理?逐开始排查问题,通过监控平台,发现个别用户尝试进行拖库。之前的处理逻辑是监控平台将黑名单入库,应用层拦截请求。感觉这种方法,需要更新代码,且其他应用无法复用。另外一种方式就是在ngxin层面阻止请求进入应用中,这样也可以减轻应用服务器的压力。通过配置就能解决问题。
server {
server subdomain.mysite.com;
deny 192.168.0.1/24; #一段连续的ip禁用方法
deny 192.168.0.25; #单个ip禁用方法
# allow myip; 允许ip访问的方式
}
配置后检查下配置,无配置错误,重启服务即可。
nginx -t
systemctl restart nginx
分析使用服务的域名时,发现用户使用在了违规项目中。本着简单处理的逻辑.直接禁用个别网站的用户访问。ngnix中处理还是蛮简单的。
## 禁用特定referer用户访问
## The ~* makes it case insensitive as opposed to just a ~
if ($http_referer ~ "baidu\.com|google\.net|bing\.com") {
return 403;
}
配置后检查下配置,无配置错误,重启服务即可。
nginx -t
systemctl restart nginx
如果 Referer 条件非常多,可以使用以下方法来优化 Nginx 配置:
使用正则表达式匹配:使用正则表达式可以减少需要配置的规则数量。也就是上面的方法。
使用 map 模块:使用 map 模块可以将 Referer 条件映射到特定的变量,并在 Nginx 配置中使用该变量。
以下是一个使用 map 模块的示例:
map $http_referer $block_referer {
hostnames;
default 0;
baidu.com 1;
google.com 1;
bing.com 1;
}
server {
listen 80;
server_name subdomain.mysite.com;
location / {
if ($block_referer) {
return 403;
}
}
}
在上面的示例中,我们将 Referer 条件映射到 $block_referer 变量,并在 Nginx 配置中使用该变量。这样可以减少在配置中的代码量,并提高配置的可读性和可维护性。
有关 Nginx 内置变量的更多信息,请参阅 Nginx 官方文档:http://nginx.org/en/docs/varindex.html
注意,在 Nginx 中使用 map 模块需要重启 Nginx 使配置生效。
if ($http_user_agent ~* "Scrapy|Baiduspider|Curl|HttpClient|Bytespider|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser
|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSp
ider|Ezooms|^$"){
return 403;
}
配置后检查下配置,无配置错误,重启服务即可。
nginx -t
systemctl restart nginx
如需跳转其他页面,配置如下:
if ($http_user_agent ~* "Scrapy|Baiduspider|Curl|HttpClient|Bytespider|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser
|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSp
ider|Ezooms|^$") {
return 301 https://yoursite.com;
}
#fbrbidden not GET|HEAD|POST method access
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 403;
}
配置后检查下配置,无配置错误,重启服务即可。
nginx -t
systemctl restart nginx
配置生效后,可采用postman等发包工具进行校验。