Nginx动静分离
分离准备
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和
静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx
处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种,
一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏
览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源
设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,
所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,
不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一
个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304
如果有修改,则直接从服务器重新下载,返回状态码 200。
准备工作
1、在Liunx系统中准备静态资源,用于访问。
在目录下创建data文件夹里面放www与img文件夹
2、具体配置
在nginx配置文件中进行配置
3、测试
浏览器中 输入地址
http://192.168.17.129/image/01.jpg
Nginx配置高可用集群
什么是高可用
普通的:
高可用:
需要两台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的配置文件里面
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原理
worker如何进行工作的:
一个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_connectionworker_processes/2
如果是http作为反向代理:worker_connection*worker_processes/4
Nginx1.2版本
新特性有:
- 邮件代理模式中有Max_errors指令
- 支持了pop3与IMAP流水线
- listen指令中有fastopen参数了
更改了:
keepalive_request:默认值为1000
加了
keepalive_time指令