Nginx反向代理(多域名,多ip)防攻击,快速切换

2015年7月2日 由 admin 留言 »

做站最烦人的就是被攻击,最最蛋疼的是,追着你打。你数据刚搬好到新的服务器上,他立马又给你干掉。坚持搞你一周,你会崩溃掉。最近被一个sb追着打了一个半月。搞的流量从几十万跌到十几万。搬数据,也搬的我吐血。
后面发现了一个好东东,反向代理。只要把数据备份一份到一台服务器上,作为源服务器。然后,有攻击,立马切换到抗攻击的服务器做的前台,几分钟搞定,无需搬数据。简单快速!
单个网站反向代理案例
服务器上的ip都可以解析。

server {
      listen       80;
      server_name doman.com www.doman.com;
      location /
                {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_pass http://2.2.2.1;
      proxy_cache_key $host$uri$is_args$args;
      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_set_header   Referer $http_referer;
      proxy_set_header Cookie $http_cookie;
      proxy_set_header Accept-Encoding "";
      proxy_intercept_errors on;
      #proxy_cache_valid  200 304 12h;
      #expires      1d;
                  }
      #access_log  off;
       }

服务器上只使用一个ip:1.1.1.1

server {
      listen  1.1.1.1:80;
      server_name doman.com www.doman.com;
      location /
                {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_pass http://2.2.2.1;
      proxy_cache_key $host$uri$is_args$args;
      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_set_header   Referer $http_referer;
      proxy_set_header Cookie $http_cookie;
      proxy_set_header Accept-Encoding "";
      proxy_intercept_errors on;
      #proxy_cache_valid  200 304 12h;
      #expires      1d;
                  }
      #access_log  off;
       }

单台服务器反向代理一个源服务器案例
只用服务器上的ip: 1.1.1.1
源服务器上的网站全部解析到这一个ip。

server {
listen 1.1.1.1:80 default backlog=1024 rcvbuf=32768 sndbuf=131072;
server_name $host;
location / {
proxy_pass http://2.2.2.1:80/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
proxy_set_header X-Nginx-Scheme $scheme;
client_max_body_size 15m;
access_log /var/log/nginx/2.2.2.1_access_log ;
error_log /var/log/nginx/2.2.2.1_error_log notice;
}
}

服务器是多ip: 1.1.1.1-1.1.1.128
源服务器上的网站可以解析到服务器上的任何ip。

server { 
listen 80; 
server_name $host; 
location / { 
proxy_pass http://2.2.2.1/;
proxy_set_header Host $host; 
proxy_redirect off; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_connect_timeout 60; 
proxy_read_timeout 600; 
proxy_send_timeout 600; 
}  
}

一个ip反向代理案例
服务器ip对应源服务器ip
1.1.1.1>>>2.2.2.1(源服务器1)
1.1.1.2>>>2.2.2.2(源服务器2)
源服务器1上的网站全部解析到ip:1.1.1.1
源服务器2上的网站全部解析到ip:1.1.1.2

server { 
listen 1.1.1.1:80 backlog=1024 rcvbuf=32768 sndbuf=131072; 
server_name $host; 
location / { 
proxy_pass http://2.2.2.1/;
proxy_set_header Host $host; 
proxy_redirect off; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_connect_timeout 60; 
proxy_read_timeout 600; 
proxy_send_timeout 600; 
}  
}


server {
listen 1.1.1.2:80 backlog=1024 rcvbuf=32768 sndbuf=131072;
server_name $host;
location / {
proxy_pass http://2.2.2.2/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
proxy_connect_timeout 60; 
proxy_read_timeout 600; 
proxy_send_timeout 600; 

}
}


proxy_set_header Referer http://www.cnbeta.com; #强制定义Referer,程序验证判断会用到
proxy_set_header Host www.cnbeta.com; #定义主机头,如果目标站点绑定的域名个server_name项的吻合则使用$host
proxy_pass http://www.cnbeta.com; #指定目标,建议使用IP或者nginx自定义池
proxy_set_header Accept-Encoding “”; #清除编码

给所有配置文件添加这个属性
location ~.*\.(jpg|png|jpeg)$
{
expires 30d;
}
location ~.*\.(js|css)?$
{
expires 1h;
}

广告位
分享到:

发表回复