nginx针对静态页面防CC攻击.docx
- 文档编号:24099284
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:17
- 大小:70.80KB
nginx针对静态页面防CC攻击.docx
《nginx针对静态页面防CC攻击.docx》由会员分享,可在线阅读,更多相关《nginx针对静态页面防CC攻击.docx(17页珍藏版)》请在冰豆网上搜索。
nginx针对静态页面防CC攻击
nginx针对静态页面防CC攻击
一、架构
Nginx介绍
Nginx是一款由俄罗斯程序设计师IgorSysoev所开发轻量级的网页服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。
Nginx的特点
Nginx相较于Apache、lighttpd具有占有内存少,稳定性高等优势,并且依靠并发能力强,丰富的模块库以及友好灵活的配置而闻名。
在Linux操作系统下,nginx使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高。
Nginx的反向代理功能
nginxproxy是nginx的重要功能,利用proxy基本可以实现一个完整的7层负载均衡,它有这些特色:
1、功能强大,性能超强,工作稳定。
2、后端转向与业务配置分离,非常灵活。
3、可以指定任意IP和端口进行配置,与网络环境是不相干的。
4、可以针对后端返回的情况判断,不正常则重新请求另一台主机,并自动剔除不正常的主机。
5、可以分配权重,并且分配均匀。
6、可以实现多种分配策略。
7、上传文件使用异步处理方式,nginx会先将文件接收下来,然后再转发到后端,这样可以减少后端服务器很多连接。
根据Nginx的特点与反向代理的功能,使之成为静态页面防CC攻击绝佳选择。
根据我们以往的经验,一台Q9300、4GB内存的主机,可以轻松防住7万链接的CC攻击,此时服务器资源占用仍然相当低。
Nginx防CC攻击的架构:
二、服务器配置
服务器环境:
CentOS6.3X64
(注:
以下文档,蓝色为配置文件的内容,红色为运行的命令)
1、安装系统、编译环境等
最小化安装CentOS。
因为安装后我们要升级系统补丁,再安装必要组件,所以没必要安装其他组件。
安装完后,配置iptables,打开80端口,或者直接关闭iptables。
用 yumupdate-y 升级系统的组件
安装编译Nginx必要的组件:
yuminstall-ygccmakesendmailpcrepcre-developensslopenssl-develnanoscreenlrzszwgetcurlcurl-develsendmailmlocateopenssh-clientsmanpatch
添加www用户组和用户,并且指定www用户的shell为/sbin/nologin
groupaddwww&& useradd-gwww-s/sbin/nologinwww
创建相关的目录
mkdir-p/var/log/nginx /var/proxy_temp_dir /var/proxy_cache_dir
#touch/var/log/nginx/.log
2、编译nginx
下载nginx
cd~
wgethttp:
//nginx.org/download/nginx-1.2.7.tar.gz
tarzxfnginx-1.2.7.tar.gz
下载ngx_cache_purge
wget--no-check-certificate"-O"ngx_cache_purge-master.zip"
unzip-xngx_cache_purge-master.zip
下载nginx-upstream-jvm-route
wget"http:
//nginx-upstream-jvm--O"nginx-upstream-jvm-route-0.1.tar.gz"
tarzxfnginx-upstream-jvm-route-0.1.tar.gz
进入nginx源代码目录
cdnginx-1.2.7
打补丁
patch-p0<../nginx_upstream_jvm_route/jvm_route.patch
编译
./configure--user=www--group=www--add-module=../nginx_upstream_jvm_route--add-module=../ngx_cache_purge-master--prefix=/usr/local/nginx--with-http_stub_status_module--with-http_ssl_module
make&&makeinstall
3、配置nginx
进入nginx的配置目录
cd/usr/local/nginx/conf/
vinginx.conf
nginx.conf的配置
userwwwwww;
worker_processes8;
pid/usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile65535;
events {
useepoll;
worker_connections65535;
}
http{
include mime.types;
default_typeapplication/octet-stream;
server_names_hash_bucket_size128;
client_header_buffer_size32k;
large_client_header_buffers432k;
client_max_body_size8m;
log_formataccess_log'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent"$http_x_forwarded_for';
sendfileon;
tcp_nopush on;
keepalive_timeout60;
tcp_nodelayon;
fastcgi_connect_timeout300;
fastcgi_send_timeout300;
fastcgi_read_timeout300;
fastcgi_buffer_size64k;
fastcgi_buffers464k;
fastcgi_busy_buffers_size128k;
fastcgi_temp_file_write_size128k;
##cache_start##
proxy_connect_timeout5;
proxy_read_timeout60;
proxy_send_timeout5;
proxy_buffer_size16k;
proxy_buffers464k;
proxy_busy_buffers_size128k;
proxy_temp_file_write_size128k;
#注:
proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_temp_path/var/proxy_temp_dir;
#设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天清理一次缓存,硬盘缓存空间大小为1GB。
proxy_cache_path/var/proxy_cache_dirlevels=1:
2keys_zone=cache_one:
200minactive=1dmax_size=1g;
##cache_end##
gzipon;
gzip_min_length1k;
gzip_buffers 416k;
gzip_http_version1.0;
gzip_comp_level2;
gzip_types text/plainapplication/x-javascripttext/cssapplication/xml;
gzip_varyon;
include upstream.conf;
include vhostconf/*.conf;
}
viupstream.conf
(增加后端服务器时,需要在此添加后端服务器。
添加或修改的主要内容是上游服务器的访问地址,以及指定upstream名称。
)
upstream {
server192.168.1.102:
80weight=1max_fails=2fail_timeout=30s;
server192.168.1.103:
80weight=1max_fails=2fail_timeout=30s;
server192.168.1.105:
80weight=1max_fails=2fail_timeout=30s;
jvm_route$cookie_JSESSIONIDreverse;
}
创建vhostconf目录
mkdir vhostconf
配置相应的主机
(增加后端服务器时,需要在此添加后端服务器。
主要修改的有绑定域名、proxy_pass对应upstream.conf的地址)
vi vhostconf/.conf
server{
listen80;
server_name;
location/{
#root/var/;
#indexindex.jspindex.htmindex.html;
#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
proxy_next_upstreamhttp_502http_504errortimeoutinvalid_header;
proxy_cachecache_one;
#对不同的HTTP状态码设置不同的缓存时间
proxy_cache_valid2003021h;
proxy_cache_valid3011d;
proxy_cache_validany1m;
#以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
proxy_cache_key$host$uri$is_args$args;
proxy_redirectoff;
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
proxy_pass;
expires1d;
}
#用于清除缓存,假设一个URL为http:
//192.168.8.42/test.txt,通过访问http:
//192.168.8.42/purge/test.txt就可以清除该URL的缓存。
location~/purge(/.*)
{
#设置只允许指定的IP或IP段才可以清除URL缓存。
allow127.0.0.1;
allow192.168.0.0/16;
denyall;
proxy_cache_purgecache_one$host$1$is_args$args;
}
#扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。
location~.*\.(php|jsp|cgi|asp|aspx)?
$
{
proxy_set_headerHost$host;
proxy_set_headerX-Forwarded-For$remote_addr;
proxy_pass;
}
location/nginx_status{
stub_statuson;
access_logoff;
allow183.63.215.39;
denyall;
}
access_log/var/log/nginx/.logaccess_log;
}
测试配置文件是否正确:
/usr/local/nginx/sbin/nginx-t
nginx:
theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisok
nginx:
configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful
4、配置nginx自启动
创建nginx自启动脚本
vi/etc/init.d/nginx
#!
/bin/bash
#nginxStartupscriptfortheNginxHTTPServer
#itisv.0.0.2version.
#chkconfig:
-8515
#description:
Nginxisahigh-performancewebandproxyserver.
# Ithasalotoffeatures,butit'snotforeveryone.
#processname:
nginx
#pidfile:
/var/run/nginx.pid
#config:
/usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
#Sourcefunctionlibrary.
./etc/rc.d/init.d/functions
#Sourcenetworkingconfiguration.
./etc/sysconfig/network
#Checkthatnetworkingisup.
[${NETWORKING}="no"]&&exit0
[-x$nginxd]||exit0
#Startnginxdaemonsfunctions.
start(){
if[-e$nginx_pid];then
echo"nginxalreadyrunning...."
exit1
fi
echo-n$"Starting$prog:
"
daemon$nginxd-c${nginx_config}
RETVAL=$?
echo
[$RETVAL=0]&&touch/var/lock/subsys/nginx
return$RETVAL
}
#Stopnginxdaemonsfunctions.
stop(){
echo-n$"Stopping$prog:
"
killproc$nginxd
RETVAL=$?
echo
[$RETVAL=0]&&rm-f/var/lock/subsys/nginx/var/run/nginx.pid
}
#reloadnginxservicefunctions.
reload(){
echo-n$"Reloading$prog:
"
#kill-HUP`cat${nginx_pid}`
killproc$nginxd-HUP
RETVAL=$?
echo
}
#Seehowwewerecalled.
case"$1"in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status$prog
RETVAL=$?
;;
*)
echo$"Usage:
$prog{start|stop|restart|reload|status|help}"
exit1
esac
exit$RETVAL
加上x权限
chmod+x /etc/init.d/nginx
加上自启动
echo/etc/init.d/nginxstart>>/etc/rc.local
启动nginx
/etc/init.d/nginxstart
三、优化
1、避免后端服务器出现大文件。
通常CC攻击会连接服务器的大文件,企图用尽服务器的带宽资源,因此,后端服务器不要放置大文件,对于大的图片,应对图片进行切片,切成多块以减小体积。
2、后端服务器尽量单独开一个非80端口(比如24392)给前端服务器,如果后端有硬件防火墙,要做直通。
3、如果后端服务器负荷仍然大,可以通过修改缓存时间等,提高命中率。
4、可以配置nginx的防攻击模块,对于连接过于频繁的client进行屏蔽。
5、可以对前端服务器进行双网卡捆绑,提高服务器带宽。
6、可以多台前端机器,采用keepalived负载均衡
四、负载均衡配置
注意:
做keepalived负载均衡,交换机必须不能绑定MAC或IP,否则keepalived无法正常运作。
yum-yinstallkernel-devel
yum-yupdatekernel
modprobeip_vs//内核加载ip_vs模块
lsmod|grepip_vs//查看是否加载成功。
以下请根据实际系统核心修改命令选项:
ln-s/usr/src/kernels/2.6.18-308.4.1.el5-i686//usr/src/linux//生成一个链接文件
cp/usr/src/kernels/2.6.18-308.4.1.el5-i686/include/net/ip_vs.h/usr/include/net///这个很重要,否则在安装ipvsadm的时候会提示缺少*.h文件
wget-c
tarzxvfkeepalived-1.2.2.tar.gz
vikeepalived-1.2.2/keepalived/libipvs-2.6/ip_vs.h
将#include
cdkeepalived-1.2.2
./configure--prefix=/usr/local/keepalived
make
makeinstall
cp/usr/local/keepalived/sbin/keepalived/usr/sbin/
cp/usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/
cp/usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/init.d/
mkdir/etc/keepalived
cd/etc/keepalived/
chkconfig--addkeepalived
chkconfigkeepalivedon
vikeepalived.conf
-------------------------------------------
主从配置实例之一
注:
配置文件里的网络接口、email、IP要根据实际情况填写。
!
ConfigurationFileforkeepalived
global_defs{
notification_email{
zhou@
}
notification_email_fromkeepalived@keepalived.org
smtp_server127.0.0.1
smtp_connect_timeout30
router_idLVS_DEVEL
}
vrrp_instanceVI_1{
stateMASTER
interfaceeth0
virtual_router_id51
mcast_src_ip113.105.157.114
priority100
advert_int1
authentication{
auth_typePASS
auth_passwy4nginx
}
virtual_ipaddress{
113.105.157.116
}
}
之二
!
ConfigurationFileforkeepalived
global_defs{
notification_email{
yuhongchun027@
}
notification_email_fromkeepalived@
smtp_server127.0.0.1
smtp_connect_timeout30
router_idLVS_DEVEL
}
vrrp_instanceVI_1{
stateBACKUP
interfaceeth0
virtual_router_id51
mcast_src_ip113.105.157.115
priority100
advert_int1
authentication{
auth_typePASS
auth_passwy4nginx
}
virtual_ipaddress{
113.105.157.116
}
}
--------------------------------------------
-----------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- nginx 针对 静态 页面 CC 攻击