【拯救赵明】利用nginx提高整体健壮性

项目要求链接如下:http://51ctoblog.blog.51cto.com/26414/300667
 
解决思路:
1 ,监控机由于只作为日志监控,负载较低,在其上安装部署 nagios 以监控生产服务器。
 
2, 服务器负载调度换成 nginx, 因为后台就两个 WEB 服务器,并且是一主一从,可以将两个都换成在线的,提高了存活性。负载方面要求简单。挂机了用 nagios 通知。
 
3 nginx 可以以极小的内存损耗来运行,生产中可以支持 2 万到 4 万个并发连接。因此 DDOS 攻击对其来说无用,合理利用转发策略可以将攻击引导向别处。更何况, nginx 可以实现静态页面前端缓存,便于缩短访问时间。可以把其处理不了的动态页面转发给后台 WEB 服务器,像 apache,tomcat 都可以,这样减轻了后台 WEB 服务器负载,并且两台 WEB 同时在线,单机平均负载更低,更不易掉线。
 
4 ,安全加固:在前端 nginx 上打开 iptables 防火墙,屏蔽一些非正常的链接,如 SYN 攻击等等。
 
5 nginx 可以通过 access_log 记录访问者 IP  nagios 监控链接阈值 iptables 封骇客 IP ,将 nginx 以后的服务器都设置成内网 IP ,在 iptables 设置禁止外网访问内网 IP
 
拓扑图:
详细说明和配置:
 
nginx 主机配置:
 
1) 安全性配置 改内核,编写防火墙脚本
 
负载均衡器上部署 linux ,更改内核:
echo 1 > /proc/sys/net/ipV4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
 
编写脚本:
#!/bin/bash
 
ipt=/sbin/iptables
INPUT_ech0=
TURN_ech1=
 
$ipt -t filter -F INPUT
$ipt -t filter -F OUTPUT
$ipt -t filter -p OUTPUT DROP
$ipt -t filter -P INPUT  DROP
$ipt -t filter -A INPUT -i ${INPUT_eth0} -m state --state INVALID -j DROP
 
$ipt -t filter -A INPUT -i ${INPUT_eth0} -p tcp --syn -m multiport --dports 22,…… -m state --state NEW -j ACCEPT
$ipt -t filter -A INPUT -i ${INPUT_eth0} -p icmp --icmp-type8 -m limit --limit 6/m --limit-brust 10 -j ACCEPT
$ipt -t filter -A INPUT -i ${INPUT_eth0} -p icmp -m state --state NEW -j DROP
$ipt -t filter -A INPUT -i ${INPUT_eth0} -m state --state ESTABLISTED,RELATED -j ACCEPT
 
$ipt -t filter -A INPUT -i ${INPUT_eth0} -s DDOS_IP --dport 80 -j DROP
$ipt -t filter -A INPUT -i ${INPUT_eth0} -s DDOS_IP -O ${TURN_ech1} -j DROP
 
 
2 nginx 缓存方面配置
 
静态文件缓存到 nginx 服务器上,直接处理并返回给浏览器, root 指令指定缓存路径
 
location ~ \.(htm|html|gif|jpg|jpeg|png|bmp|ico|css|js|txt)$ {
    root /opt/webapp;
    expires 24h;
}
                      
图片在浏览器本地缓存 15
 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
   {
     expires      15d;
   }
JavaScript CSS 在浏览器本地缓存一天
 location ~ .*\.(js|css)?$
   {
     expires      1d;
   }  
 
3) nginx 负载均衡方面配置
 
定义一个负载均衡池名为 apache
  upstream apache {
        server 192.168.0.1:80 weight=10;
        server 192.168.0.2:80 weight=10;
 
 
在前面定义了 nginx 能够直接处理一些静态文件请求后,其他的所有请求通过 proxy_pass 指令传送给后端的服务器
location / {
    proxy_pass        http://apache;
    proxy_set_header  X-Real-IP  $remote_addr;
}
 
Nginx 的集群配置中, Nginx 使用最简单的平均分配规则给集群中的每个节点分配请求。一旦某个节点失效时,或者重新起效时, Nginx 都会非常及时的处理状态的变化,以保证不会影响到用户的访问
 
4 nginx 防攻击方面配置, epoll 算法,增大最高并发连接数
    (如果预算充足的话,就部署硬件防火墙)
 
开启进程数( nginx 每个进程耗费 10M~12M 内存,可以根据实际情况增加进程数)
worker_processes  8;
events {
    use epoll;
    worker_connections  40960;# 总的 允许最大的同时连接数
 }
5) nginx 的负载能力超强,一般的DDOS 是无法击垮一台 nginx 代理的,所以用 nginx 来过滤掉一些DDOS 是完全没有问题。比如说 user-agent IE5.01, 可以指向另外一个地方
 
if ( $http_user_agent ~* "MSIE 5.01" ) {
    proxy_pass http://www. 西瓜皮 .com;
  }
 
6) 记录访问者的日志信息
log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';
   access_log  /data1/logs/access.log  access;   访问日志记录路径,等级
 
7)其他优化配置
 
keepalive_timeout 60;           #长连接超时时间
 
对网页文件、 CSS JS XML 等启动 gzip 压缩,减少数据传输量,提高访问速度。
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;
 
这里 nginx 主要作为前端缓存和 WEB 负载均衡集群,通过其承受的高并发连接数来抵抗 DDOS 攻击,同时减轻后台服务器单机平均负载。还是那句话:这是在保留现有架构的基础上所作的更改,如果预算充足的话买抗 DDOS 的硬件防火墙。
 
写在后面的假设:假如 nginx 也宕机呢??
 
后面的 WEB 服务器都安装上 nginx ,并将 nginx 配置文件稍作改进,如果前端 nginx 宕机了,可以由后台的 WEB1 来接替前端 nginx 的工作:关闭 apache ,打开 nginx ,更改 IP ,将动态处理转发到 WEB2 上。同时抢修前端 nginx
 
 
后端的监控服务器配置:
 
在监控服务器上安装 nagios ,以监控生产服务器。
具体安装文档网上有。这里发几张截图说明其监控的直观性和便捷性。
 

本文出自 “西瓜皮” 博客,谢绝转载!

你可能感兴趣的:(nginx,职场,休闲,拯救赵明)