nginx相关知识详解

一.ngnix简介:

1. ngnix是什么:

高性能的HTTP和反向代理服务器和反向代理服务器,占有内存少,并发能力强,专为性能优化开发,能经受高负载的考验

2. 反向代理:

(1) 正向代理:
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问

在这里插入图片描述

(2) 反向代理:
客户端不需要做任何配置,只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器回去数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴漏的是代理服务器地址,隐藏了真实服务器IP地址
在这里插入图片描述

3. 负载均衡:

单个服务器解决不了,我们增加服务器d额数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器

在这里插入图片描述

4. 动静分离:

为了加快网站的解析速度,可以把动态页面(jsp servlet等)和静态页面(html css js等)由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力;服务器部署动态资源,另外一台单独的服务器放静态资源,通过ngnix连接

在这里插入图片描述

二.ngnix常用操作命令:

1. 使用ngnix使用前提:

进入ngnix目录
/usr/local/ngnix/sbin

2. 查看ngnix版本:

./ngnix -v

3. 启动ngnix:

./ngnix

4. 关闭ngnix:

./ngnix -s stop

5. 重新加载ngnix(不需要重新启动服务修改的配置即可生效):

./ngnix -s reload

6. 防火墙端口设置:

查看已经开发的端口号:firewall-cmd --list-all
对方开放访问的端口:firewall-cmd –add-port:8080/tcp –permanent
然后重启:firewall-cmd --reload

三.ngnix配置文件:

1. ngnix配置文件位置:

/usr//local/ngnix/conf/ngnix.conf

2. ngnix配置文件组成:

(1) 全局块:
从配置文件开始到everts块之间的内容,主要会设置一些影响服务器整体运行的配置指令,比如worker_processes 1;worker processes越大,可以支持的并发处理量也越多
(2) events块:
events块涉及的指令主要影响ngnix服务器与用户的网络连接,比如worker_connections 1024;支持的最大连接数
(3) http块:
ngnix服务配置中最频繁的部分,http块也包括http全局块、server块

四.ngnix配置实例:

1. 反向代理实例:

(1) 打开浏览器,在浏览器地址栏输入地址www.123.com,跳转到linux系统tomcat主页当中
(2) 使用ngnix反向代理,根据访问的路径跳转到不同端口的服务中,ngnix监听端口为9001;
访问http://129.168.0.1:9001/st1/ 直接跳转到129.168.0.1:8080
访问http://129.168.0.1:9001/st2/ 直接跳转到129.168.0.1:8090
可以应用ngnix配置文件中server里面的location进行配置:
server: {
listen 9001;
server_name 服务器ip地址
location ~/str1/ { proxy_pass http://129.168.0.1:8080;}
location ~/str2/ { proxy_pass http://129.168.0.1:8090;}
}
~表示正则表达式
最后需要开发防火墙端口

2. 负载均衡实例:

(1) 在浏览器中输入http://129.168.0.1/st1/ ,负载均衡效果,平均到8080和8081端口中去,在ngnix.conf中配置:
http:{
upstream myserver{
ip_hash;
server 129.168.0.1:8080 weight=1;
server 129.168.0.1:8081 weight=1;
}
server{
location /{
proxy_pass http://myserver;
proxy_connect_timeout 10;
}
}
}
(2) ngnix分配服务器策略:
a. 轮询(默认):每次按时间顺序逐一分配到不同的后端服务器,服务器down掉,默认剔除掉
b. weight:weight代表权,默认为1,权重越高,被分配的客户端越多;
c. ip_hash:每个请求按ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题;
d. fair(第三方)方式:按照后端服务器的响应时间来分配,响应时间越短,优先分配

3. 动静分离实例:

(1) 将动态请求和静态请求分开,使用ngnix处理静态页面,tomcat处理动态页面
(2) 目前实现动静分离两种方式:
a. 纯粹把静态文件放在独立成单独的域名,放在独立的服务器上;
b. 动态跟静态文件混合在一起发布,通过ngnix将其分开;
(3) 实现:
location /www/ {
root /data/;
index index.html index.html;
}
Location /img/{
root /data/;
autoindex on;
}

五.ngnnix配置高可用的集群:

1. 什么是ngnix高可用:

当一台服务器宕机时,整个服务就不要可用,这时可以配置两台ngnix服务器,一台主服务器,一台备份服务器,优先通过主ngnix服务器,如果主服务器宕机,则使用备用的ngnix服务器
需要两台或以上ngnix服务器
需要keepalived
需要虚拟ip
(1)一个主服务器,一个从服务器:
在这里插入图片描述
(2)Keepalived+Nginx 高可用集群(双主模式):

在这里插入图片描述

2. 实现:

(1) 修改keepalived.conf配置
(2) 在/usr/local/src添加检测脚本,修改ngnix_check_sh文件
(3) 把两台服务器上ngnix和keepalived启动

六.ngnix原理:

1. master和worker:

在这里插入图片描述

2. worker是如何工作的:

在这里插入图片描述

3. 一个master和多个worker的好处:

(1) 可以使用ngnix -s reload热部署,利用ngnix进行热部署操作
(2) 每个worker都是一个独立的进程,如果其中有一个worker出现问题,其他worker是独立的,继续进行争抢,实现请求过程,不会造成服务器中断

4. 如何设置worker数量:

worker数量和服务器的CPU数量相等最为适用(ngnix和redis都采用io多路复用机制)

标题5. 连接数(worker_connection):

(1) 发送一个请求,占用了worker的两个或者四个连接数(根据访问不同占用连接数有所不同)
(2) 如果ngnix有一个master,四个worker,每个worker支持最大的连接数据为1024,如何求支持的最大并发数:
worker_connection:为每个worker支持的最大连接数
worker_process:为worker数量
a. 如果是普通的静态访问,最大并发数是worker_connectionworker_process/2; b. 如果是HTTP作为反向代理来说,最大并发数是worker_connectionworker_process/4