问题总结
一、什么是Nginx
是一个轻量级的高性能的反向代理,web服务器,实现非常高效的反向代理,负载均衡,可以处理高并发的连接数,支持5万并发
二、为什么要使用
-
跨平台性,配置简单,
-
反向代理,高并发连接,处理大量连接数据
-
内存消耗小处理静态资源,内存消耗小
-
而且Nginx内置的健康检查功能,如果有一台服务器宕机,会做一个健康检查
-
节省宽带,支持GZIP压缩,可以添加浏览器到本地缓存稳定性高
-
宕机的概率是非常小的接收用户请求是异步的
三、为何Nginx性能这么高
-
事件处理机制 是异步非阻塞事件处理机制,运用了epoll模型,提供了一个队列,排队解决
-
Nginx接收一个请求后,首先由listen和serve_name指令匹配server模块,再匹配serve模块里的location 进行内部地址映射
server{
listen 80: 提供服务的端口 默认是80
server_name localhost: 提供服务的域名主机名
localtion /{
root html: 站点的根目录,相当于Nginx的安装目录
index index.html index.html 默认的首页文件 多个用空格分开
}}
四、正向代理,反向代理
- 正向代理: 发送请求直接到到目的地
- 反向代理: 请求统一由Nginx接收。Nginx反向代理服务器接收到信息之后,按照一定的规则发送给后端的业务进行集中处理
使用反向代理服务器的优点:
反向代理服务器可以隐藏原服务器的存在和特征,它充当互联网云和web服务器之间的中间层, 安全系数大大提升,尤其是使用web托管服务
五、Nginx优点
- 占用内存小,可以实现高并发连接,处理响应快 ,可以实现http服务
- 虚拟主机,方向代理,负载均衡
- Nginx配置简单
- 可以不暴露任何正式的服务器ip地址
六、Nginx缺点
- 动态处理性能差,Nginx后处理静态文件好,耗费内存小,但是处理动态页面则很鸡肋,
- 现在一般前端用 Nginx作为反向代理抗住压力
七、动静分离技术的必要性
Nginx是当下最热的web容器,网站优化的重点在于静态化网站,网站今天化的关键点则是动静分离,动静分离是然后动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分之后,我们则根据静态资源的特点将其做缓存操作。
Nginx 的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术
对于静态资源比如图片,js css等文件 我们则在反向代理服务器Nginx中进行缓存,这样浏览器 在请求一个静态资源的时候,代理服务器Nginx就可以直接进行处理,无需将请求转发给后端服务器Tomcat,若用户请求的动态文件,如果servlet .jsp则转发给Tomcat服务器进行处理,从而实现动静分离,这也是反向代理服务器的一个重要的作用
八、Nginx实现动静分离
-
先指定存储的路径 /usr/static/stroage
-
配置Nginx.conf
location /image/[
root /usr/static/storage/ ;
autoindex on;
}
./nginx
重启
nginx -s reload
九、Nginx负载均衡策略
目的:为了避免服务器奔溃,通过负载均衡的方式来进行分担服务器的压力,于是乎将多个服务器组成一个集群,当用户进行访问的时候,先访问到一个转发的服务器,再由转发服务器转发到分发到不同的服务器进行释压,均摊压力值
每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,则自动剔除
upstream backserver{
server 192.168.56.1;
server 192.168.56.3;
}
upstream backserver{
server 192.168.56.1 weight = 2;
server 192.168.56.3 weight = 8;
}
每个请求按访问ip的哈希结果分配,使来自同一个ip的访客固定访问同一台服务器(同时解决session共享的问题)
upstream backserver{
ip_hash
server 192.168.56.1;
server 192.168.56.3;
}
相对于更加智能的算法,可以根据页面大小和加载时间的长短智能的进行负载均衡,响应时间较短的则优先被访问到
upstream backserver{
server 192.168.56.1;
server 192.168.56.3;
fair;
}
总而言之就是服务器响应较快的先被访问到
匹配符 | 匹配规则 | 优先级 |
---|---|---|
= | 精确匹配 | 1 |
^~ | 以某个字符串开头 2 ~ 区分大小写的正则匹配 | 3 |
~* | 不区分大小写的正则匹配 | 4 |
!~ | 区分大小写不匹配的正则 | 5 |
!~* | 不区分大小写不匹配的正则 | 6 |
/ | 通用匹配,任何请求都会匹配到 | 7 |
优先级1=======精确匹配,根路径
location =/{
return /www/data
}
优先级2=======以/mete开头的,区分大小的,优先匹配路径
location ^~ /mete
{
alias /data/static
}
优先级3=======区分大小写的正则匹配,匹配/mete 路径
location ~/mete
{
alias /data/static
}
优先级4=======不区分大小写,所有满足相应条件的都进行匹配,带莫某后缀的
location ~ * . * \ .(jpg|png|js|css){
root /data/static
}