你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

一文搞懂Nginx

[复制链接]
gaosmile 发布时间:2020-10-1 18:24
Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好。
Nginx 专为性能优化而开发,性能是其最重要的要求,十分注重效率,有报告 Nginx 能支持高达 50000 个并发连接数。5 N% ^9 ?" F+ B

" q9 S& j) ?4 u# O, ]: v: w9 fNginx 知识网结构图
Nginx 的知识网结构图如下:
微信图片_20201001161529.png
反向代理
正向代理:局域网中的电脑用户想要直接访问网络是不可行的,只能通过代理服务器来访问,这种代理服务就被称为正向代理。
微信图片_20201001161534.png
反向代理:客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回到客户端。
此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
微信图片_20201001161537.png
负载均衡
客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕之后,再将结果返回给客户端。
普通请求和响应过程如下图:
微信图片_20201001161541.png
但是随着信息数量增长,访问量和数据量飞速增长,普通架构无法满足现在的需求。
我们首先想到的是升级服务器配置,可以由于摩尔定律的日益失效,单纯从硬件提升性能已经逐渐不可取了,怎么解决这种需求呢?
我们可以增加服务器的数量,构建集群,将请求分发到各个服务器上,将原来请求集中到单个服务器的情况改为请求分发到多个服务器,也就是我们说的负载均衡。
图解负载均衡:
微信图片_20201001161544.png
假设有 15 个请求发送到代理服务器,那么由代理服务器根据服务器数量,平均分配,每个服务器处理 5 个请求,这个过程就叫做负载均衡。
动静分离
为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析的速度,降低由单个服务器的压力。
动静分离之前的状态:
微信图片_20201001161547.png

. J9 U* N6 [& {
动静分离之后:
微信图片_20201001161550.png
安装
参考链接:
https://blog.csdn.net/yujing1314/article/details/972673691 f9 d. A+ s$ \% [# B
4 E* X0 a2 T7 }- L4 z

7 F. r/ p& \8 ?0 ^Nginx 常用命令
查看版本:
./nginx -v
启动:
./nginx
关闭(有两种方式,推荐使用 ./nginx -s quit):
./nginx -s stop
1 D. q2 ~" J9 ~+ x2 ]& \$ k./nginx -s quit
重新加载 Nginx 配置:
./nginx -s reload
" l. m) ]+ D$ S2 f9 B1 m; `4 E1 i( B: J5 X; f2 H8 z( g% d) K

; Z) r" ^5 w/ x. o5 G2 dNginx 的配置文件
配置文件分三部分组成:
①全局块
从配置文件开始到 events 块之间,主要是设置一些影响 Nginx 服务器整体运行的配置指令。
并发处理服务的配置,值越大,可以支持的并发处理量越多,但是会受到硬件、软件等设备的制约。
微信图片_20201001161554.png
②events 块
影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 workprocess 下的网络连接进行序列化,是否允许同时接收多个网络连接等等。
支持的最大连接数:
微信图片_20201001161557.png
③HTTP 块
诸如反向代理和负载均衡都在此配置。
location[ = | ~ | ~* | ^~] url{- ~6 I0 L7 ~- \0 x. F- \) m
: A* F" R# h# x
}
location 指令说明,该语法用来匹配 url,语法如上:
  • =:用于不含正则表达式的 url 前,要求字符串与 url 严格匹配,匹配成功就停止向下搜索并处理请求。
  • ~:用于表示 url 包含正则表达式,并且区分大小写。
  • ~*:用于表示 url 包含正则表达式,并且不区分大小写。
  • ^~:用于不含正则表达式的 url 前,要求 Nginx 服务器找到表示 url 和字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再匹配。
  • 如果有 url 包含正则表达式,不需要有 ~ 开头标识。
    / Z! [# C$ ~: d6 u5 R' ?
反向代理实战
①配置反向代理
目的:在浏览器地址栏输入地址 www.123.com 跳转 Linux 系统 Tomcat 主页面。
②具体实现
先配置 Tomcat,因为比较简单,此处不再赘叙,并在 Windows 访问:
- e+ |# S) ?2 d8 U. g& h6 W$ b  W+ W9 w3 b4 H- n
微信图片_20201001161601.png
具体流程如下图:
微信图片_20201001161605.png
修改之前:
微信图片_20201001161608.png
配置如下:
微信图片_20201001161611.png
再次访问:
微信图片_20201001161615.png
③反向代理 2
目标:
准备:配置两个 Tomcat,端口分别为 8080 和 8081,都可以访问,端口修改配置文件即可。
微信图片_20201001161619.png
微信图片_20201001161624.png
新建文件内容分别添加 8080!!!和 8081!!!
微信图片_20201001161627.png
微信图片_20201001161632.png
反向代理小结
第一个例子:浏览器访问 www.123.com,由 host 文件解析出服务器 ip 地址
" r/ j9 P' C- ^# t5 x* ]6 V( @3 D192.168.25.132 www.123.com。
然后默认访问 80 端口,而通过 Nginx 监听 80 端口代理到本地的 8080 端口上,从而实现了访问 www.123.com,最终转发到 tomcat 8080 上去。
第二个例子:
0 r' w) u5 F" a( U访问 http://192.168.25.132:9001/edu/ 直接跳转到 192.168.25.132:80807 n6 j& {, P$ W) }% E
访问 http://192.168.25.132:9001/vod/ 直接跳转到 192.168.25.132:8081
实际上就是通过 Nginx 监听 9001 端口,然后通过正则表达式选择转发到 8080 还是 8081 的 Tomcat 上去。
负载均衡实战
①修改 nginx.conf,如下图:
微信图片_20201001161635.png
微信图片_20201001205829.jpg
②重启 Nginx:
./nginx -s reload
③在 8081 的 Tomcat 的 webapps 文件夹下新建 edu 文件夹和 a.html 文件,填写内容为 8081!!!!
④在地址栏回车,就会分发到不同的 Tomcat 服务器上:
微信图片_20201001205842.png
微信图片_20201001205846.png
负载均衡方式如下:
  • 轮询(默认)。
  • weight,代表权,权越高优先级越高。
  • fair,按后端服务器的响应时间来分配请求,相应时间短的优先分配。
  • ip_hash,每个请求按照访问 ip 的 hash 结果分配,这样每一个访客固定的访问一个后端服务器,可以解决 Session 的问题。

    4 U" l. H6 J7 t
动静分离实战
什么是动静分离?把动态请求和静态请求分开,不是讲动态页面和静态页面物理分离,可以理解为 Nginx 处理静态页面,Tomcat 处理动态页面。
动静分离大致分为两种:
  • 纯粹将静态文件独立成单独域名放在独立的服务器上,也是目前主流方案。
  • 将动态跟静态文件混合在一起发布,通过 Nginx 分开。

    ' M3 G& h4 o; N4 w
动静分离图析:
微信图片_20201001205849.png
实战准备,准备静态文件:
微信图片_20201001205852.png
微信图片_20201001205856.png
配置 Nginx,如下图:
微信图片_20201001205859.png
Nginx 高可用
如果 Nginx 出现问题:
微信图片_20201001205903.png
解决办法:
微信图片_20201001205907.png
前期准备:
  • 两台 Nginx 服务器
  • 安装 Keepalived
  • 虚拟 ip
    . p9 r8 v3 L% `# ~& ~8 L/ P  z
安装 Keepalived:
[root@192 usr]# yum install keepalived -y% j, z. t" n" d+ w
[root@192 usr]# rpm -q -a keepalived' s, P) P5 [* g" _/ \- k+ y
keepalived-1.3.5-16.el7.x86_64
修改配置文件:
[root@192 keepalived]# cd /etc/keepalived
" c; H5 S% C5 q: J; z* z[root@192 keepalived]# vi keepalived.conf
分别将如下配置文件复制粘贴,覆盖掉 keepalived.conf,虚拟 ip 为 192.168.25.50。
对应主机 ip 需要修改的是:
  • smtp_server 192.168.25.147(主)smtp_server 192.168.25.147(备)
  • state MASTER(主) state BACKUP(备)
    1. 8 p2 C; W$ I4 l* m8 S, b
    2. global_defs {) B; d3 f* ^% S- t7 x
    3.    notification_email {" ^( a: S' N# i8 p* x# [) ^
    4.      acassen@firewall.loc. A* g2 @: U- i/ M$ ~0 i1 g" g0 R
    5.      failover@firewall.loc
        o. Z8 x: V! x- E8 W( z: p9 z
    6.      sysadmin@firewall.loc$ L" n* \# q1 t$ R% d& B
    7.    }  t( L3 W0 U2 ^: @$ H
    8.    notification_email_from Alexandre.Cassen@firewall.loc
      1 u- H+ L) Z2 H7 F
    9.    smtp_server 192.168.25.1474 L- p. n. k) x' r
    10.    smtp_connect_timeout 30" G7 ]/ M( H+ D) ~0 c$ k3 m
    11.    router_id LVS_DEVEL # 访问的主机地址6 k9 {' f" B! ?! y5 O% @9 i
    12. }
      - O2 J; ]7 x* t5 ^4 l; c  z3 o3 o
    13. / P( l0 C) o9 z; q1 i( V1 n
    14. vrrp_script chk_nginx {
      * M5 \4 T& f" U
    15.   script "/usr/local/src/nginx_check.sh"  # 检测文件的地址
      ! b2 V* i' z- t! c
    16.   interval 2   # 检测脚本执行的间隔/ F: a) E' x+ A
    17.   weight 2   # 权重: i7 a' n/ W$ N- |$ C5 I
    18. }
      " m3 {+ T& o5 J' S  U( A) e

    19. 8 M) s+ k( }' G8 G
    20. vrrp_instance VI_1 {
      " i6 |5 T2 ]  g5 X$ r
    21.     state BACKUP    # 主机MASTER、备机BACKUP   
      : H# X2 H/ e1 ?$ ]! j7 f" Y7 d
    22.     interface ens33   # 网卡: |2 M& L6 d- s; {9 w  R0 [2 }6 s
    23.     virtual_router_id 51 # 同一组需一致8 k6 q' E) _# d! u$ Y  S
    24.     priority 90  # 访问优先级,主机值较大,备机较小" t, h6 e& k$ M6 H
    25.     advert_int 15 d: r1 ]+ R: v7 L1 F3 B0 G5 f
    26.     authentication {$ T/ @$ g& |9 k! j
    27.         auth_type PASS2 E% H  w, f+ `: p- y4 J! k
    28.         auth_pass 1111
      ) O* y  T) Y- i7 ]: `+ c8 X
    29.     }
      ( G4 A0 {0 W8 E# ~5 E
    30.     virtual_ipaddress {
      ' Y% h8 q0 f7 k1 p+ u% Z1 A. l
    31.         192.168.25.50  # 虚拟ip
        J1 f1 N# e' S/ P# ?7 K
    32.     }/ I# ]. u" u# J  f
    33. }
    复制代码

    . `* U$ `9 W2 o$ {

3 r" l& c9 g! p" S2 F. J
启动命令如下:
[root@192 sbin]# systemctl start keepalived.service
访问虚拟 ip 成功:
微信图片_20201001205910.png
关闭主机 147 的 Nginx 和 Keepalived,发现仍然可以访问。
原理解析
微信图片_20201001205913.png

) @7 H. _& r7 t! h! m) b9 f2 _
如下图,就是启动了一个 master,一个 worker,master 是管理员,worker是具体工作的进程。
. X5 B  w, T% s6 z/ D3 p; F 微信图片_20201001205916.png % _& O' w% m* z& }! E
worker 如何工作?如下图:

, J# o1 D" w( Q& b, @
微信图片_20201001205920.png
小结
8 U9 Q9 _" ]+ E. F
worker 数应该和 CPU 数相等;一个 master 多个 worker 可以使用热部署,同时 worker 是独立的,一个挂了不会影响其他的。2 s! O1 T! f" _& d8 Y
/ A* Z6 d* g/ P! F
赞 收藏 评论0 发布时间:2020-10-1 18:24

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版