默认情况下,nginx会返回默认页,无法阻断未备案域名的访问。
可以在nginx配置文件中,手动添加一段配置内容,实现未备案域名返回400错误。
例如:
listen 80 default;
server_name _;
return 400;
}
将以上内容保存为文件:400.conf,然后将此文件include到主配置文件nginx.conf中:
然后,
,重新加载nginx配置文件。
解释:
server_name _; 泛域名配置,即默认情况下,所有域名都返回400报错。
在主配置文件nginx.conf或其它配置文件中已绑定的域名除外。
nginx是个不错的web服务器软件,配置简单,性能卓越,完全可以替代apache。
Limit Requests模块可以限制单个客户端发送请求的速率。
示例配置如下:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location ~ .*\.(php|php5)?$
{
limit_req zone=one burst=5 nodelay;
fastcgi_pass unix:/tmp/php-cgi-www..sock;
fastcgi_index index.php;
include fcgi.conf;
}
}
以上配置,限制单个客户端请求php动态文件的速率是每秒一个请求,峰值是5个请求。
附,nginx利用limit模块设置IP并发防CC攻击
在nginx.conf 中的http字段下面加入:
然后,在server下配置的主机定义文档中加入如下一行(全局就加在server下面)
limit_req zone=one burst=8 nodelay; ###不用队列 默认的突发(burst是0)
如果只想限制php的请求,加在location中:
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
limit_req zone=one burst=8 nodelay;
重加载nginx:
nginx -s reload
比如nginx.conf的http段配置:
limit_req zone=req burst=150;
“limit_req_zone $binary_remote_addr zone=req:20m rate=100r/s;”
相当于在nginx创建了一个检查站,名字叫req,凡是跟req相关的请求,并限定检查速率是100r/s。
所以当使用“limit_req zone=reqburst=150;”指定某些请求需要经过req时,请求的速率就被限制为100r/s,通过查看日志,可以检测到验证结果。
然后就是burst=150了。这相当于在检查站req旁边放150个座位。如果某个请求当时超过速度限制被拦了,请他在空座位上坐着,等排队,如果检查站空了,就可以通过。如果连座位都坐满了,那就抱歉了,请求直接退回,客户端得到一个服务器忙的响应。
因此,burst跟request_rate一点关系都没有,设成10000,就是1万个请求可以等着排队,而检查站还是1秒钟放行100个请求(龟速)。而且也不能一直排队,所以nginx还设了超时,排队超过一定时间,也是直接退回,返回服务器忙的响应。
就是这些了,在某些特定的环境或需求中,确实要进行限速或防止CC攻击,希望以上的方法,可以帮助到大家。
对nginx日志文件进行自动分割,是个不错的主意,这在日常的运行中应当作为一个固定的任务来执行。
本文介绍的方法,把每天的日志文件分割出来,并以时间命名。
首先,创建日志分割脚本。
1、登录SSH,创建cut_logs.sh文件
vi /root/cut_logs.sh
内容如下:
# The Nginx logs path
logs_path="/var/wwwlogs/"
mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}www..log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/juzihc_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
2、添加cut_logs.sh执行权限
设置cut_logs.sh启动时间,执行命令crontab -e进入编辑状态:
设置定时任务:每天0点01分启动。
完成以上二步之后,每天定时分割日志文件就设置成功了。
有兴趣的朋友,可以考虑将日志执行tar压缩,还可以在脚本中设置删除多少天前的文件。
这些留给大家自己研究吧。
您可能感兴趣的文章:
nginx 日志分割的小脚本
分享:Logrotate分割nginx日志的脚本
nginx日志配置、Nginx日志分割
Nginx日志按天分割的方法分享(图文)
一个分割ngnix网站日志的Shell脚本