1、Nginx基础知识
1.1认识Nginx
百科给出的解释:
总结:
Nginx是一个高性能的Http和反向代理web服务器。
Nginx特点:
1、跨平台Nginx可以在⼤多数类unix操作系统上编译运⾏,⽽且也有windows版本。
2、Nginx学习成本比较低。
3、高并发、性能好。
4、稳定性好、宕机概率低。
1.2Nginx核心运用场景
1.2.1Http服务器
性能⾮常⾼,⾮常注重效率,能够经受⾼负载的考验。
⽀持50000个并发连接数,不仅如此,CPU和内存的占⽤也⾮常的低,10000个没有活动的连接才占⽤2.5M的内存。
1.2.2反向代理服务器
正向代理
在浏览器中配置代理服务器信息,通过代理服务器访问目标网站,代理服务器收到目标网站的响应之后,会把响应信息返回给我们的浏览器上。【简单理解就是通过代理服务器去访问一个网点】
正向代理图解
反向代理
浏览器客户端发送请求到反向代理服务器(⽐如Nginx),由反向代理服务器去选择原始服务器提供服务获取结果响应,最终再返回给客户端浏览器。【说白了就是 就是客户端看不到真实的服务器,看到的都是代理服务器,而这个代理服务器将请求转发到真实的服务器获取到响应这个过程称之为反向代理】
正向代理和反向代理的区别:
正向代理是通过代理服务器去连接到一个网站,而这个代理服务器属于一个媒介,就算是没有代理服务器,要访问的网站也是对外可见的。
反向代理一般反向代理服务器和网站真实的服务器(比如Tomcat服务器)是一体的,真实的服务器对外是不可见的,只能通过反向代理服务器去访问。
1.2.3负载均衡服务器
负载均衡的思想:当反向代理服务器收到请求之后会把请求转发给真实的服务器,如果真实的服务器很多的时候,会按照一定的算法分发给其中的一台服务器。如果请求量非常大的时候,负载均衡就是将请求分发给各个真实的服务器来有效达到降低真实服务器的压力。这个就是负载均衡的思想。
1.2.4动静分离
动静分离思想就是说,由Nginx服务器直接托管静态资源,当用户请求的时候判断如果是静态资源的话直接通过Nginx返回给客户端,如果是动态资源的话在请求转发给真实的服务器。用来降低服务器的真实压力。
2、Nginx基础使用
2.1Nginx安装
下载地址 http://nginx.org/en/download.html下载之后上传到自己的服务器上进行解压,在这里我使用的是nginx-1.17.8版。
进入解压之后的目录。
1)安装nginx的依赖pcre、openssl、gcc、zlib
执行:yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
2)执行 ./configure 命令【如果出现权限不够的话需要自己修改权限 chmod +x configure这个命令修改】
3)执行make 命令 进行编译。
4)执行make install命令进行安装。
这个时候已经安装好了,安装的目录在/usr/local/nginx
启动nginx服务器 cd /usr/local/nginx ./sbin/nginx
查看是否运行 ps -ef | grep nginx
如果出现两个进程证明nginx已经安装好了,直接访问自己服务器的ip就能访问,默认监听的是80端口。
2.2Nginx常用命令
./nginx 启动nginx
./nginx -s stop 终⽌nginx(当然也可以找到nginx进程号,然后使⽤kill -9 杀掉nginx进程)
./nginx -s reload (重新加载nginx.conf配置⽂件)
2.3Nginx配置文件概述
Nginx核心配置文件nginx.conf
分三个模块全局快、events块、http块。
1、 全局块
从配置⽂件开始到events块之间的内容,此处的配置影响nginx服务器整体的运⾏,⽐如worker进
程的数量、错误⽇志的位置等
2、events块
events块主要影响nginx服务器与⽤户的⽹络连接,⽐如worker_connections 1024,标识每个
workderprocess⽀持的最⼤连接数为1024
3、http块
http块是配置最频繁的部分,虚拟主机的配置,监听端⼝的配置,请求转发、反向代理、负载均衡
等。
3、Nginx应用-反向代理服务器
3.1反向代理配置案例
需求1:通过本机的反向代理服务器访问本机的Tomcat服务器。
首先启动服务器上的tomcat服务器,修改配置文件。
在使用命令./stbin/nginx -s reload重新启动就可以访问本机上的tomcat服务器了。
需求2:我输入localhost/abc可以访问到tomcat1 输入localhost/def访问到tomcat2
首先需要在服务器上启动两个tomcat两个tomcat端口号不能保持一致 比如8080 和 8081,然后在nginx中进行配置。
3.2location配置规则
对于location后边跟的匹配规则:
①普通路径 location /abc {... }
②正则匹配 location ~/abc {...}
③不区分⼤⼩写的正则匹配 location ~* /abc { }
④匹配路径的前缀 location ^~ /abc { }
⑤精确匹配 location = /abc { }
优先级⑤>④>③>②>①
4、Nginx应用-负载均衡
4.1Nginx基本使用
需求:访问同一个url将流量打到不同的机器上。
首先准备两个tomcat开启两个不同的端口然后对nginx进行配置。
4.2Nginx负载均衡策略
1、轮询
默认策略,每个请求按时间顺序逐⼀分配到不同的服务器,如果某⼀个服务器下线,能⾃动剔除
upstream hello{
server 127.0.0.1:8080;server 127.0.0.1:8082;
}
location /abc {
proxy_pass http://hello/;
}
2、weight权重
weight代表权重,默认每⼀个负载的服务器都为1,权重越⾼那么被分配的请求越多(⽤于服务器性能不均衡的场景)
upstream hello {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8080 weight=1;
}
3、ip_hash
每个请求按照ip的hash结果分配,每⼀个客户端的请求会固定分配到同⼀个⽬标服务器处理,可以解决session问题。
upstream hello{
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
5、Nginx应用-动静分离
首先需要将静态资源文件放在 /usr/local/nginx根目录下
在根目录下自定义一个文件夹 比如staticData在这个目录下在创建一个static目录等于现在静态资源文件都放在/usr/local/nginx/staticData/static目录下
Nginx配置文件:实在server下边在创建一个标签。
访问路径可以直接是http://127.0.0.1/static/helloworld.html
6、Nginx进程模型讲解
6.1Nginx进程模型
Nginx启动后,以多进程⽅式在后台运⾏,包括⼀个Master进程和多个Worker进程,Master进程是领导,是⽼⼤,Worker进程是⼲活的⼩弟。
master进程
主要是管理worker进程,⽐如:
1)接收外界信号向各worker进程发送信号(./nginx -s reload)。
2)监控worker进程的运⾏状态,当worker进程异常退出后Master进程会⾃动重新启动新的worker进程等。
worker进程
worker进程具体处理⽹络请求。多个worker进程之间是对等的,他们同等竞争来⾃客户端的请求,各进程互相之间是独⽴的。⼀个请求,只可能在⼀个worker进程中处理,⼀个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,⼀般设置与机器cpu核数⼀致【直接在配置文件的第一行就能配置】。
模型图
6.2命令处理说明
以 ./nginx -s reload 来说明nginx信号处理这部分
1)master进程对配置⽂件进⾏语法检查
2)尝试配置(⽐如修改了监听端⼝,那就尝试分配新的监听端⼝)
3)尝试成功则使⽤新的配置,新建worker进程
4)新建成功,给旧的worker进程发送关闭消息
5)旧的worker进程收到信号会继续服务,直到把当前进程接收到的请求处理完毕后关闭所以reload之后worker进程pid是发⽣了变化的
在执行完reload之后worker的pid发生了变化证明reload是从新创建了一个worker进程。
6.3worker进程处理请求部分的说明
例如,我们监听9003端⼝,⼀个请求到来时,如果有多个worker进程,那么每个worker进程都有
可能处理这个链接。
master进程创建之后,会建⽴好需要监听的的socket,然后从master进程再fork出多个worker进程。所以,所有worker进程的监听描述符listenfd在新连接到来时都变得可读。
nginx使⽤互斥锁来保证只有⼀个worker进程能够处理请求,拿到互斥锁的那个进程注册listenfd读事件,在读事件⾥调⽤accept接受该连接,然后解析、处理、返回客户端
6.4nginx多进程模型好处
1、每个worker进程都是独⽴的,不需要加锁,节省开销
2、每个worker进程都是独⽴的,互不影响,⼀个异常结束,其他的照样能提供服务
3、多进程模型为reload热部署机制提供了⽀撑