Nginx动静分离

分离准备

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和
静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx
处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种,
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;

另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。

通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏

览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源

设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,

所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,

不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一

个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304

如果有修改,则直接从服务器重新下载,返回状态码 200。

nginx 图片动静分离 nginx实现动静分离_nginx 图片动静分离

准备工作

1、在Liunx系统中准备静态资源,用于访问。
在目录下创建data文件夹里面放www与img文件夹

2、具体配置

在nginx配置文件中进行配置

nginx 图片动静分离 nginx实现动静分离_学习_02


3、测试

浏览器中 输入地址

http://192.168.17.129/image/01.jpgnginx 图片动静分离 nginx实现动静分离_学习_03

Nginx配置高可用集群

什么是高可用

普通的:

nginx 图片动静分离 nginx实现动静分离_nginx_04

高可用:

nginx 图片动静分离 nginx实现动静分离_学习_05


需要两台Nginx服务器

需要keepalived

和虚拟ip

配置高可用的准备工作

1、需要两台服务器 192.168.17.129 192.168.17.131
2、在两台服务器安装nginx
3、两台服务器上安装keepalived

直接安装指令:

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl openssl -devel
# 解压pcre
tar -xvf pcre-8.37.tar.gz

#再解压Nginx

#然后进入Nginx目录
./configure

#最后
make && make install

#开启端口

#在服务器上安装keepalived
#使用yum命令
yum install keepalived -y

#查看版本号
rpm -q -a keepalived

keepalived安装在etc里面 然后进入keepalived的配置文件里面

nginx 图片动静分离 nginx实现动静分离_nginx_06

4、完成高可用配置(主从配置)
修改keepalived.conf文件

#全局配置
global_defs {
    notification_email {
    acassen@firewall.loc
    failover@firewall.loc
    sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    smtp_server 192.168.17.129 #主机ip
    smtp_connect_timeout 30
    router_id LVS_DEVEL #服务器域名名字,可在/etc/hosts中查看127.0.0.1映射的域名
}

#脚本配置
vrrp_script chk_http_port {
    script "/usr/local/src/nginx_check.sh"#脚本路径
    interval 2 #(检测脚本执行的间隔);每隔2s检查一次
    weight 2 #设置服务器权重
}

#虚拟ip的配置
vrrp_instance VI_1 {
        state Master# Master为Master;Salve为BACKUP
        interface ens33 #网卡;可以用ip addr 看网卡名
        virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
        priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
        advert_int 1 #每1s发送一次心跳
        authentication {
        auth_type PASS
        auth_pass 1111
	}
	virtual_ipaddress {
    	192.168.17.50 // VRRP H 虚拟ip地址,多台keepalived绑定一个ip;必须同一网段
	}
}

在/usr/local/src 添加检测脚本

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx #nginx启动路径
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived #nginx挂掉后,杀掉这个服务器的所有keepalived进程
    fi
fi

5、启动两台服务器的nginx与keepalived

./nginx
systemctl start keepalived.service

#查看进程
ps -ef | grep keepalived

最终测试:
浏览器中:http:192.168.17.50

Nginx原理

nginx 图片动静分离 nginx实现动静分离_nginx 图片动静分离_07

worker如何进行工作的:

nginx 图片动静分离 nginx实现动静分离_nginx_08

一个master和多个worker有什么好处:
1、可以使用nginx -s reload热部署
2、不需要加锁
3、独立的进程 不影响其他进程 有 worker出现问题,其他是正常的

设置多少个worker才是合适的?
每个worker线程都可以把每个cpu的性能发挥到机制 如8核cpu就设置8个worker
设置对应于cpu对应的数量

连接数:worker_connection
发送请求后,暂占用了worker的几个连接数
答案:2个或者4个

Nginx有一个master 有四个woker,每个worker支持最大的连接数据1024, 41024
如果是静态访问最大并发数:worker_connection
worker_processes/2
如果是http作为反向代理:worker_connection*worker_processes/4

Nginx1.2版本

新特性有:

  • 邮件代理模式中有Max_errors指令
  • 支持了pop3与IMAP流水线
  • listen指令中有fastopen参数了
    更改了:
    keepalive_request:默认值为1000
    加了
    keepalive_time指令