Nginx

是一个高性能的HTTP和反向代理的WEB服务器

作用:高性能,高负载,能反向代理,负载均衡,动静分离

官网: https://lnmp/org

 先了解几个名词

正向代理

例如:我们想访问谷歌直接访问不到,就得通过代理服务器帮助客户端访问,同时隐藏客户端信息

正向代理帮助的是客户端,即可以把 客户端+正向代理服务 视为一个整体

反向代理

在反向代理中,客户端发送的请求首先到达反向代理服务器,然后反向代理服务器将请求转发给后端服务器。

负载均衡

Nginx接收客户端的请求,根据指定的策略/算法进行负载均衡到不同的Tomcat/服务

客户端A                                               Tomcat集群

                                                       Tomcat8000


                Nginx                                  Tomcat8001              



                                                       Tomcat8002   

客户端B

动静分离

一个请求携带有有静态资源(js,css,html,图片等)和动态资源(jsp,servlet)等,如果每种资源都发个请求给Tomcat,服务器压力爆表,所以得把动静资源分开

传统分布式

客户端A                                               Tomcat集群

                                                         Tomcat8000
                                                        html,css,servlet


                  Nginx                                  Tomcat8001              
                                                        html,css,servlet


                                                         Tomcat8002   
                                                        html,css,servlet
客户端B

动静分离项目部署

客户端A                                               Tomcat集群

                                                       Tomcat8000
                                                        servlet,jsp




                     Nginx                                Tomcat8001              
                    动静配置                              servlet,jsp

                处理静态资源服务器(Nginx)
                  html.css.js


                                                       Tomcat8002   
                                                        servlet,jsp
客户端B

Nginx下载安装( P28 -13)

安装前提:

首先得先安装了Linux(CentOS7.6),并且可以连接外网,使用Xshell连接Vm虚拟机

安装流程(略)

Nginx默认端口80,Linux访问http://localhost即可

打开防火墙后,windows访问192.168.198.135      //linux中配置的Nginx地址

启动Nginx : /user/local/nginx/sbin/nginx -c nginx.conf

关闭Nginx: /user/local/nginx/sbin/nginx -s stop

Nginx配置文件

在/user/local/nginx下 nginx.conf

可以完成对Nginx的各种配置:端口,并发数,重写规则等 。相关文档网上有

大致分为:全局块,events块,http块

全局块:主要设置一些影响Nginx整体运行的配置指令,Nginx服务器的用户(组),允许生成的worker process数,进程PID存放路径,日志路径及配置文件引入

events块:主要影响Nginx服务器与用户的网络连接

http块: 包括http全局块与server块;Nginx服务器配置中最复杂的部分,代码,缓存等绝大数功能和第三方模块都在这里

   http全局块:包括文件引入MIME-TYPE定义,单链接请求上限,连续超时时间等

   server块:最常见的配置是本虚拟机的监听配置和本虚拟机主机名称或IP配置

   location块:最常见反向代理的目标地址

反向代理

示意图

Windows系统                                                    Linux主机

在C:/Windows/...hosts                            Nginx:80                 Tomcat:8080
配置192.168.198.135 www.test.com             根据配置将请求反向代理到         (不开放端口)
                                                  TOMCAT    

前提:Linux安装了jdk8(韩顺平课程有),安装Tomcat(并关闭对外端口,只有Nginx能访问)

首先找到Window下的hosts文件(记事本打开)

#配置www.test.com
192.168.198.135 www.test.com

修改Nginx的nginx.conf

#找到server块

server_name  192.168.198.135;



 location块

proxy_pass http://127.0.0.1:8080;     #Tomcat的地址

PS:nginx     -t                   //可以测试默认配置文件哪里错误   nginx   -t -c  指定检查那里

启动Nginx: ./sbin/nginx -c nginx.conf

然后在Windows访问:www.test.com即可访问到Tomcat

反向代理实例:通过不同访问地址访问到不同页面

示意图

Windows系统                                                    Linux主机

在C:/Windows/...hosts                            Nginx:80                 Tomcat:8080
配置192.168.198.135 www.test.com             根据配置将请求反向代理到         (不开放端口)
                                                  TOMCAT                  部署商品服务
                                                                           




                                                               Windows主机

                                                                          Tomcat:8080
                            
                                                                           部署搜索服务

Windows通过不同访问地址访问到 商品服务或搜索服务

Location语法

=: =表示精确匹配

^~:表示uri以某个常规字符串开头,匹配url路径

~:表示区分大小写

~*:不区分大小写

location = / {

 #规则A          

}

location = /login {

  #规则B

}

http://localhost/        #将匹配到规则A

http://localhost/login   #将匹配到规则B

1.先判断精准命中,再判断普通命中

2.普通命中如果有多个命中,则"记录"下最长的命中(即最符合的)

3.继续判断正则表达式解析结果,按配置里正则表达式顺序从上而下为准匹配

4.普通命中顺序无所谓,正则顺序有所谓

即如果普通匹配中有 ^~(不进行正则匹配)则直接返回不记录匹配结果,否则记录匹配结果再进行正则匹配,如果两个都是正则匹配如果第一个直接匹配上则直接返回

实现例子:先在Windows系统

192.168.198.135 www.testmall.com

再在Xshell中修改Nginx的conf

server{
 listen  10000;
 server_name  192.168.198.135;

 location ~ /product/ {
     
    proxy_pass  http://127.0.0.1:8080;               

 }

 location ~ /member/ {
     
    proxy_pass  http://192.168.198.1:8080;             #windows的Tomcat8080端口

 }


}

     www.testmall.com:10000/product  可以到 127... Tomcat的8080端口

     www.testmall.com:10000/member 可以到 192... Linux的8080端口

负载均衡

Linux下Ngix可以提供负载均衡,默认轮询,也可权重,按ip_hash固定分配

要求: Windows输入 www.test.com/search/live.html 可以轮询tomcat的8080端口和8081端口

Window配置(hosts下)

192.168.12.134 www.test.com

Nginx配置

http全局块

http{
 ...
 upstream testservers{                 //名字自己定,但不能带_
   
   server 192.168.198.135:8080;                 //配置要进行均衡的服务器地址+端口
   server 192.168.198.135:8081;

}
 
server{
  listen    80;
  server_name 192.168.12.134;

  location /search {
    root html;
    proxy_pass  http://testservers;             //此处testservers对应上面的
    index   index.html index.htm;               

 }

 }
}

PS:记得修改Linux的Tomcat端口(P30-44),同时浏览器不能是无痕

www.test.com/search/live.html 可以轮询tomcat的8080端口和8081端口

动静分离

也就是把动态请求和静态请求分开,Nginx处理静态,Tomcat处理动态,可以减轻Tomcat压力

传统方式是将动静文件都放在Tomcat处理

采用master-worker机制

                          管理员    
                           ||
                           ||信号    
                           || 
======================================================
Nginx                      ||
                          Monster
                           ||
                           ||信号
                           ||
    
     workerA             workerB         workerC
                          ||
                          || 连接

                         client

一个master process可以管理多个 worker process,即Nginx采用多进程结构非多线程结构

client发出请求时,master 会通知管理的worker,worker开始争抢任务完成任务

争抢时候可能会消耗资源故Nginx通过accept_mutex解决"惊群现象",即加在accept的一把共享锁,每个锁在执行accept前都需获取锁才能执行accep()。

每个worker都是独立的只有一个主线程的进程不共享资源,不需要锁可加快效率

几个进程通过IO多路复用实现高并发

通过异步非阻塞处理机制,epoll模型实现



requestA

                      进程                Tomcat           数据库


requestB

假如requestA 来了进程会先发给Tomcat,Tomcat进行处理,此时进程不会等待,而是去迎接requestB,当Tomcat完成后会通知进程,然后worker接手

参数设置

woker数和服务器的cpu数相等是最为适宜

例:

worker_processes      开启的cpu数

worker_cpu_affinity     进程

2核cpu,开2个线程 :  01 10

2核cpu,开4个线程 : 01 10 01 10

4核cpu,开2个线程 : 0101(第一个和第三个内核)  1010(第二个和第四个内核)

搭建高可用集群

Keepalived+Nginx  主从模式

两台Linux分别安装Nginx服务器和Keepalived,一台做主,一台备份,安装keepalived保证主从关系,对外IP(ip和vip)

示意图

                       192.168.198.135
                       Nginx:80[主Master]               Tomcat1
                           keepalived
                                                        Tomcat2

用户                     虚拟IP(VIP)                      
                       192.168.198.18                       


                        
                        192.168.198.136
                       Nginx:80[备:backup]

虚拟IP(VIP)在主Nginx和备Nginx都配置属于他们两个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值