透过实用性 Nginx 命令行,同时实现萨德基全权、逆向全权、阻抗平衡、Nginx 内存、回音分立和高需用 Nginx 6种机能,并对 Nginx 的基本原理作更进一步的导出。当须要采用 Nginx 命令行时,参照责任编辑示例方可,提议珍藏。
1. 萨德基全权
萨德基全权的全权第一类是应用程序。萨德基全权是全权伺服器替应用程序去出访最终目标伺服器。
1.1 两栖作战一
同时实现效用:
在应用程序输出 http://www.google.com, 应用程序重定向到http://www.google.com。
具体内容实用性:在须要出访内网的应用程序上继续执行下列一类操作方式方可:
2. 逆向全权
逆向全权指全权后端伺服器积极响应应用程序允诺的两个中介机构伺服器,全权的第一类是服务器端。
2.1 两栖作战一
同时实现效用:
在应用程序输出 http://www.abc.com, 从 nginx 伺服器重定向到 linux 系统 tomcat 主页面。
具体内容实用性:2.2 两栖作战二
同时实现效用:
根据在应用程序输出的路径不同,重定向到不同路由器的服务中。
具体内容实用性:location 指令说明:
~ : 表示uri包含正则表达式,且区分大小写。~* : 表示uri包含正则表达式,且不区分大小写。= : 表示uri不含正则表达式,要求严格匹配。3 阻抗平衡
3.1 两栖作战一
同时实现效用:
在浏览器门牌号栏输出
http://192.168.4.32/example/a.html,平均到 5000 和 8080 路由器中,同时实现阻抗平衡效用。
具体内容实用性:nginx 分配伺服器策略
轮询(默认)
按允诺的时间顺序依次逐一分配,如果伺服器down掉,能自动剔除。权重
weight 越高,被分配的应用程序越多,默认为 1。比如: upstream myserver { server 192.167.4.32:5000 weight=10; server 192.168.4.32:8080 weight=5; } 复制代码ip
按允诺 ip 的 hash 值分配,每个访客固定出访两个后端伺服器。比如: upstream myserver { ip_hash; server 192.167.4.32:5000; server 192.168.4.32:8080; } 复制代码fair
按后端伺服器的积极响应时间来分配,积极响应时间短的优先分配到允诺。比如: upstream myserver { fair; server 192.168.4.32:5000; server 192.168.4.32:8080; }4. Nginx 内存
4.1 两栖作战一
同时实现效用:
在3天内,透过应用程序门牌号栏出访 http://192.168.4.32/a.jpg,不会从伺服器抓取资源,3天后(过期)则从伺服器重新下载。
具体内容实用性:expires 是给两个资源设定两个过期时间,透过 expires 参数设置,可以使应用程序内存过期时间之前的内容,减少与伺服器之间的请求和流量。也是说无需去服务器端验证,直接透过应用程序自身确认是否过期方可,所以不会产生额外的流量。此种方式非常适合不经常变动的资源。
5. 回音分立
5.1 两栖作战一
同时实现效用:
透过应用程序门牌号栏出访 http://www.abc.com/a.html ,出访静态资源伺服器的静态资源内容。透过应用程序门牌号栏出访 http://www.abc.com/a.jsp,出访动态资源伺服器的动态资源内容。
具体内容实用性:6. 高需用
一般情况下,透过 nginx 主伺服器出访后台最终目标服务集群,当主伺服器挂掉后,自动切换至备份伺服器,此时由备份伺服器充当主伺服器的角色,出访后端最终目标伺服器。
6.1 两栖作战一
同时实现效用:
准备两台 nginx 服务器,透过应用程序门牌号栏出访虚拟 ip 门牌号,把主伺服器的 nginx 停止,再次出访虚拟 ip 门牌号仍旧有效。
具体内容实用性:
(1)在两台 nginx 伺服器上安 keepalived。
keepalived 相当于两个路由,它透过两个脚本来检测当前伺服器是否还活着,如果还活着则继续出访,否则就切换到另一台备份伺服器。(2)修改主备伺服器
/etc/keepalived/keepalivec.conf 命令行(可直接替换),完成高需用主从实用性。
keepalived 将 nginx 伺服器绑定到两个虚拟 ip , nginx 高需用集群对外统一暴露这个虚拟 ip,应用程序都是透过出访这个虚拟 ip 来出访 nginx 伺服器 。字段说明
router_id: 在 /etc/hosts 文件中实用性,透过它能出访到我们的主机。 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 127.0.0.1 LVS_DEVEL 复制代码interval: 设置脚本继续执行的间隔时间weight: 当脚本继续执行失败即 keepalived 或 nginx 挂掉时,权重增加的值(可为负数)。interface: 输出 ifconfig 命令查看当前的网卡名是什么。(3)在 /usr/local/src 目录下添加检测脚本 nginx_check.sh。
(4)启动两台伺服器的 nginx 和 keepalived。
(5)查看虚拟 ip 门牌号 ip a 。把主伺服器 192.168.4.32 nginx 和 keepalived停止,再出访虚拟 ip 查看高需用效用。
6. 基本原理导出
Nginx 启动之后,在 Linux 系统中有两个进程,两个为 master,两个为 worker。master 作为管理员不参与任何工作,只负责给多个 worker 分配不同的任务(worker 一般有多个)。
worker 是如何工作的?
应用程序发送两个允诺首先要经过 master,管理员收到允诺后会将允诺通知给 worker,多个 worker 以争抢的机制来抢夺任务,得到任务的 worker 会将允诺经由 tomcat 等做允诺转发、逆向全权、出访数据库等(nginx 本身是不直接支持 java 的)。两个 master 和多个 worker 的好处?
可以采用 nginx -s reload 进行热部署。每个 worker 是独立的进程,如果其中两个 worker 出现问题,其它 worker 是独立运行的,会继续争抢任务,同时实现应用程序的允诺过程,而不会造成服务中断。设置多少个 worker 合适?
Nginx 和 redis 类似,都采用了 io 多路复用机制,每个 worker 都是两个独立的进程,每个进程里只有两个主线程,透过异步非阻塞的方式来处理允诺,每个 worker 的线程可以把两个 cpu 的性能发挥到极致,因此,worker 数和伺服器的 cpu 数相等是最为适宜的。