国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

nginx針對(duì)靜態(tài)頁(yè)面防CC攻擊

nginx 針對(duì)靜態(tài)頁(yè)面防CC 攻擊一、架構(gòu)Nginx 介紹Nginx 是一款由俄羅斯程序設(shè)計(jì)師Igor Sysoev所開(kāi)發(fā)輕量級(jí)的網(wǎng)頁(yè)服務(wù)器、反向代理服務(wù)器以及電子郵件(IMAP/POP3)代理服務(wù)

nginx 針對(duì)靜態(tài)頁(yè)面防CC 攻擊

一、架構(gòu)

Nginx 介紹

Nginx 是一款由俄羅斯程序設(shè)計(jì)師Igor Sysoev所開(kāi)發(fā)輕量級(jí)的網(wǎng)頁(yè)服務(wù)器、反向代理服務(wù)器以及電子郵件(IMAP/POP3)代理服務(wù)器。

Nginx 的特點(diǎn)

Nginx 相較于Apache 、lighttpd 具有占有內(nèi)存少,穩(wěn)定性高等優(yōu)勢(shì),并且依靠并發(fā)能力強(qiáng),豐富的模塊庫(kù)以及友好靈活的配置而聞名。在Linux 操作系統(tǒng)下,nginx 使用epoll 事件模型,得益于此,nginx 在Linux 操作系統(tǒng)下效率相當(dāng)高。

Nginx 的反向代理功能

nginx proxy 是nginx 的重要功能,利用proxy 基本可以實(shí)現(xiàn)一個(gè)完整的7層負(fù)載均衡,它有這些特色:

1、功能強(qiáng)大,性能超強(qiáng),工作穩(wěn)定。

2、后端轉(zhuǎn)向與業(yè)務(wù)配置分離,非常靈活。

3、可以指定任意IP 和端口進(jìn)行配置,與網(wǎng)絡(luò)環(huán)境是不相干的。

4、可以針對(duì)后端返回的情況判斷,不正常則重新請(qǐng)求另一臺(tái)主機(jī),并自動(dòng)剔除不正常的主機(jī)。

5、可以分配權(quán)重,并且分配均勻。

6、可以實(shí)現(xiàn)多種分配策略。

7、上傳文件使用異步處理方式,nginx 會(huì)先將文件接收下來(lái),然后再轉(zhuǎn)發(fā)到后端,這樣可以減少后端服務(wù)器很多連接。

根據(jù)Nginx 的特點(diǎn)與反向代理的功能,使之成為靜態(tài)頁(yè)面防CC 攻擊絕佳選擇。根據(jù)我們以往的經(jīng)驗(yàn),一臺(tái)Q9300、4GB 內(nèi)存的主機(jī),可以輕松防住7萬(wàn)鏈接的CC 攻擊,此時(shí)服務(wù)器資源占用仍然相當(dāng)?shù)汀?/p>

Nginx 防CC 攻擊的架構(gòu):

,

,

二、服務(wù)器配置

服務(wù)器環(huán)境:CentOS 6.3 X64

(注:以下文檔,藍(lán)色為配置文件的內(nèi)容,紅色為運(yùn)行的命令)

1、安裝系統(tǒng)、編譯環(huán)境等

最小化安裝CentOS 。因?yàn)榘惭b后我們要升級(jí)系統(tǒng)補(bǔ)丁,再安裝必要組件,所以沒(méi)必要安裝其他組件。

安裝完后,配置iptables ,打開(kāi)80端口,或者直接關(guān)閉iptables 。

用 yum update -y 升級(jí)系統(tǒng)的組件

安裝編譯Nginx 必要的組件:

yum install -y gcc make sendmail pcre pcre-devel openssl openssl-devel nano screen lrzsz wget curl curl-devel sendmail mlocate openssh-clients man patch

添加www 用戶組和用戶,并且指定www 用戶的shell 為/sbin/nologin

groupadd www && useradd -g www -s /sbin/nologin www

創(chuàng)建相關(guān)的目錄

mkdir -p /var/log/nginx /var/proxy_temp_dir /var/proxy_cache_dir

#touch /var/log/nginx/test.com.log

2、編譯nginx

下載nginx

cd ~

wget

tar zxf nginx-1.2.7.tar.gz

下載ngx_cache_purge

wget --no-check-certificate

"https://github.com/FRiCKLE/ngx_cache_purge/archive/master.zip" -O "ngx_cache_purge-master.zip"

unzip -x ngx_cache_purge-master.zip

下載nginx-upstream-jvm-route

wget

"http://nginx-upstream-jvm-route.googlecode.com/files/nginx-upstream-jvm-route-0.1.tar.gz" -O "nginx-upstream-jvm-route-0.1.tar.gz"

tar zxf nginx-upstream-jvm-route-0.1.tar.gz

進(jìn)入nginx 源代碼目錄

cd nginx-1.2.7

打補(bǔ)丁

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 && make install

3、配置nginx

進(jìn)入nginx 的配置目錄

cd /usr/local/nginx/conf/

vi nginx.conf

nginx.conf 的配置

user www www;

worker_processes 8;

pid /usr/local/nginx/logs/nginx.pid;

worker_rlimit_nofile 65535;

events {

use epoll;

worker_connections 65535;

}

include mime.types;

default_type application/octet-stream;

server_names_hash_bucket_size 128;

client_header_buffer_size 32k;

large_client_header_buffers 4 32k;

client_max_body_size 8m;

log_format access_log '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for';

sendfile on;

tcp_nopush on;

keepalive_timeout 60;

tcp_nodelay on;

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

fastcgi_buffer_size 64k;

fastcgi_buffers 4 64k;

fastcgi_busy_buffers_size 128k;

,

fastcgi_temp_file_write_size 128k;

##cache_start##

proxy_connect_timeout 5;

proxy_read_timeout 60;

proxy_send_timeout 5;

proxy_buffer_size 16k;

proxy_buffers 4 64k;

proxy_busy_buffers_size 128k;

proxy_temp_file_write_size 128k;

#注:proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區(qū)

proxy_temp_path /var/proxy_temp_dir;

#設(shè)置Web 緩存區(qū)名稱為cache_one,內(nèi)存緩存空間大小為200MB ,1天清理一次緩存,硬盤緩存空間大小為1GB 。

proxy_cache_path /var/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=1g;

##cache_end##

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_http_version 1.0;

gzip_comp_level 2;

gzip_types text/plain application/x-javascript text/css application/xml;

gzip_vary on;

include upstream.conf;

include vhostconf/*.conf;

}

vi upstream.conf

(增加后端服務(wù)器時(shí),需要在此添加后端服務(wù)器。添加或修改的主要內(nèi)容是上游服務(wù)器的訪問(wèn)地址,以及指定upstream 名稱。)

upstream www.test.com {

server 192.168.1.102:80 weight=1 max_fails=2 fail_timeout=30s;

server 192.168.1.103:80 weight=1 max_fails=2 fail_timeout=30s;

server 192.168.1.105:80 weight=1 max_fails=2 fail_timeout=30s;

jvm_route $cookie_JSESSIONID reverse;

}

創(chuàng)建vhostconf 目錄

mkdir vhostconf

,

配置相應(yīng)的主機(jī)

(增加后端服務(wù)器時(shí),需要在此添加后端服務(wù)器。主要修改的有綁定域名、proxy_pass對(duì)應(yīng)upstream.conf 的地址)

vi vhostconf/test.com.conf

server {

listen 80;

server_name www.test.com;

location / {

#root /var/www/test.com;

#index index.jsp index.htm index.html;

#如果后端的服務(wù)器返回502、504、執(zhí)行超時(shí)等錯(cuò)誤,自動(dòng)將請(qǐng)求轉(zhuǎn)發(fā)到upstream 負(fù)載均衡池中的另一臺(tái)服務(wù)器,實(shí)現(xiàn)故障轉(zhuǎn)移。

proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_cache cache_one;

#對(duì)不同的HTTP 狀態(tài)碼設(shè)置不同的緩存時(shí)間

proxy_cache_valid 200 302 1h;

proxy_cache_valid 301 1d;

proxy_cache_valid any 1m;

#以域名、URI 、參數(shù)組合成Web 緩存的Key 值,Nginx 根據(jù)Key 值哈希,存儲(chǔ)緩存內(nèi)容到二級(jí)緩存目錄內(nèi)

proxy_cache_key $host$uri$is_args$args;

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_pass http://www.test.com;

expires 1d;

}

#用于清除緩存,假設(shè)一個(gè)URL 為http://192.168.8.42/test.txt,通過(guò)訪問(wèn)

location ~ /purge(/.*)

{

#設(shè)置只允許指定的IP 或IP 段才可以清除URL 緩存。

allow 127.0.0.1;

allow 192.168.0.0/16;

deny all;

proxy_cache_purge cache_one $host$1$is_args$args;

}

#擴(kuò)展名以.php 、.jsp 、.cgi 結(jié)尾的動(dòng)態(tài)應(yīng)用程序不緩存。

,

location ~ .*.(php|jsp|cgi|asp|aspx)?$

{

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

proxy_pass http://www.test.com;

}

location /nginx_status {

stub_status on;

access_log off;

allow 183.63.215.39;

deny all;

}

access_log /var/log/nginx/test.com.log access_log;

}

測(cè)試配置文件是否正確:

/usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

4、配置nginx 自啟動(dòng)

創(chuàng)建nginx 自啟動(dòng)腳本

vi /etc/init.d/nginx

#!/bin/bash

# nginx Startup script for the Nginx HTTP Server

# it is v.0.0.2 version.

# chkconfig: - 85 15

# description: Nginx is a high-performance web and proxy server. # It has a lot of features, but it's not for everyone.

# 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"

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

,

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

[ -x $nginxd ] || exit 0

# Start nginx daemons functions.

start() {

if [ -e $nginx_pid ];then

echo "nginx already running...."

exit 1

fi

echo -n $"Starting $prog: "

daemon $nginxd -c ${nginx_config}

RETVAL=$?

echo

[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx

return $RETVAL

}

# Stop nginx daemons functions.

stop() {

echo -n $"Stopping $prog: "

killproc $nginxd

RETVAL=$?

echo

[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid }

# reload nginx service functions.

reload() {

echo -n $"Reloading $prog: "

#kill -HUP `cat ${nginx_pid}`

killproc $nginxd -HUP

RETVAL=$?

echo

}

# See how we were called.

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}" exit 1

esac

exit $RETVAL

加上x 權(quán)限

chmod x /etc/init.d/nginx

加上自啟動(dòng)

echo /etc/init.d/nginx start >> /etc/rc.local

啟動(dòng)nginx

/etc/init.d/nginx start

,

三、優(yōu)化

1、避免后端服務(wù)器出現(xiàn)大文件。通常CC 攻擊會(huì)連接服務(wù)器的大文件,企圖用盡服務(wù)器的帶寬資源,因此,后端服務(wù)器不要放置大文件,對(duì)于大的圖片,應(yīng)對(duì)圖片進(jìn)行切片,切成多塊以減小體積。

2、后端服務(wù)器盡量單獨(dú)開(kāi)一個(gè)非80端口(比如24392)給前端服務(wù)器,如果后端有硬件防火墻,要做直通。

3、如果后端服務(wù)器負(fù)荷仍然大,可以通過(guò)修改緩存時(shí)間等,提高命中率。

4、可以配置nginx 的防攻擊模塊,對(duì)于連接過(guò)于頻繁的client 進(jìn)行屏蔽。

5、可以對(duì)前端服務(wù)器進(jìn)行雙網(wǎng)卡捆綁,提高服務(wù)器帶寬。

6、可以多臺(tái)前端機(jī)器,采用keepalived 負(fù)載均衡

標(biāo)簽: