(1)是什么?
Nginx是一个高性能的HTTP和反向代理服务器,及电子邮件(IMAP/POP3)代理服务器,同时也是一个非常高效的反向代理、负载平衡。Nginx是一个HTTP服务器和反向代理服务器。
(2)nginx负载均衡的算法怎么实现的?
1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2)、weight(加权轮询)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3)、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5)、url_hash(第三方)cookie sticky
nginx内置策略包含加权轮询和ip hash
加权轮询算法分为先深搜索和先广搜索,那么nginx采用的是先深搜索算法,即将首先将请求都分给高权重的机器,直到该机器的权值降到了比其他机器低,才开始将请求分给下一个高权重的机器;
(3)优点:
1.高并发连接:
官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。
2.内存消耗少:
在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。
3.配置文件非常简单:
风格跟程序一样通俗易懂。
4.成本低廉:
Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币。
5.支持Rewrite重写规则:
能够根据域名、URL的不同,将 HTTP 请求分到不同的后端服务器群组。
6.内置的健康检查功能:
如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
7.节省带宽:
支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
8.稳定性高:
用于反向代理,宕机的概率微乎其微,如果我们做了主备,那么基本不会宕机了
(4)为什么Nginx性能这么高?
得益于它的事件处理机制:
异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决
(5)正向代理
一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理
正向代理总结就一句话:代理端代理的是客户端
(6)反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求,发给内部网络上的服务器, 并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器
反向代理总结就一句话:代理端代理的是服务端
(7)动态资源、静态资源分离
动态资源、静态资源分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路
动态资源、静态资源分离简单的概括是:动态文件与静态文件的分离
(8)负载均衡
负载均衡即是代理服务器将接收的请求均衡的分发到各服务器中
负载均衡主要解决网络拥塞问题,提高服务器响应速度,服务就近提供,达到更好的访问质量,减少后台服务器大并发压力
9)主备切换: keepalived
keepalived 是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
(10)Nginx和apache对比
Nginx和Apache一样,都是一个HTTP服务器软件,功能实现上都采用模块化结构设计,都支持通用的语言接口,如PHP、Perl、Python等,同时还支持正、反向代理,虚拟主机,URL重写,压缩传输,SSL加密传输
区别:Apache的所有模块都支持动、静态编译,而Nginx模块都是静态编译的,在处理连接方式上,Nginx支持epoll,而Apache却不支持。
(11)Nginx 日志文件的切割
方法 1:Kill –USR Nginx 主进程号
方法 2:cronolog 滚动切割日志
(12)Nginx 中的指令与组件
1)location
有两个点需要关注:
一是匹配顺序:
正则 location 匹配让步普通 location 的严格精确匹配结果(用等于号匹配最优先进入);但覆盖普通 location 的最大前缀匹配结果(正则匹配的优先级
高于普通),同类的匹配按照书写顺序。
二目录规划。
根据项目需要做 location 的规划,方便对不同的资源请求做特殊处理。有根据不同的系统划分 loaction,也有根据资源的属性划分的,如将*.html|jpg|png|css 等静态资源划入同一个 location 进行处理。
2)Rewrite
rewrite 功能就是,使用 nginx 提供的全局变量或自己设置的变量,结合正则表达式和标志位实现 url 重写以及重定向。rewrite 只能放在 server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用,例如 http://seanlook.com/a/we/index.php?id=1&u=str 只对/a/we/index.php 重写。语法
rewrite regex replacement [flag].
flag 标志位
last : 相当于 Apache 的[L]标记,表示完成 rewrite
break : 停止执行当前虚拟主机的后续 rewrite 指令集
redirect : 返回 302 临时重定向,地址栏会显示跳转后的地址
permanent : 返回 301 永久重定向,地址栏会显示跳转后的地址
3)if
nginx 配置文件指令语法里没有 else,并且 if 语句不能嵌套 if 语句
4)include
引入外部文件指令。把同类的指令抽取到一个文件中,再用这个简单的指令引入,能让 nginx 配置文件简洁
5)Proxy_pass
代理指向哪里
6)proxy_redirect
代理重定向,一般建议设置 proxy_redirect off 即可
7)upstream
upstream 节点在 http 节点下。upstream 是实现负载均衡的模块
8)gzip
开启 gzip 压缩静态文件功能,节省带宽。
9)proxy_cache
服务端缓存
10)expires
客户端缓存
11)concat
第三方模块,合并静态资源文件请求。目标减少请求个数,提高性能。