nginx简介
要点:
- nginx是一个高性能的http和反向代理服务器,其有很多特点(不间断热部署)。
- nginx专为性能优化而开发。
- 其有反向代理,负载均衡,动静分离三大特点。
反向代理
正向代理
比如想要看ytb需要使用梯子,这个过程梯子比作代理服务器,在使用代理服务器访问ytb的过程就是正向代理。
反向代理简介
在正向代理中,如果访问ytb需要配置代理服务器,而在反向代理中,只需要将请求发送给反向代理服务器,由反向代理服务器获取数据后,在返回给用户。 此时反向代理服务器和目标服务器对外暴露的就是一个服务器,暴露的是代理服务器的地址,隐藏了真是服务器的ip地址 。
负载均衡
在并发请求比较小的情况下:
在实际开发中,信息量很大,系统的并发要求越来越高,用以上方式可能会造成系统崩溃,使用负载均衡可以提高并发数量。
使用负载均衡
单个服务器解决不了,那就增加服务器数量,然后将请求分布在各个服务器上,将负载分布到各个服务器的过程,称负载均衡。
动静分离
为了加快网站的解析速度,把动态页面和静态页面由不同的服务器来解析,降低原来单个服务器的压力。
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx处理静态页面,Tomcat 处理动态页面。
nginx在linux的安装
安装过程
-
使用远程连接工具连接linux操作系统。
-
安装相关素材
2-1安装 pcre 依赖
①下载:wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
②解压压缩文件
使用命令 tar -xvf pcre-8.37.tar.gz
③ cd进入 pcre-8.37 然后./configure 回到 pcre 目录下执行 make && make install
查看pcre依赖是否安装成功:pcre-config --version
2-2 安装 openssl 、zlib 、 gcc 依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
-
安装 nginx
下载网址:http://nginx.org/en/download.html
-
使用命令解压 tar…
-
./configure
-
make && make install
进入目录 /usr/local/nginx/sbin/nginx 启动服务
安装后,不能访问的,需要对防火墙进行设置也可以直接关闭防火墙,并防止自启(在练习模式中)
① 查看开放的端口
firewall-cmd --list-all
② 设置开放的端口号
firewall-cmd --add-port=80/tcp --permanent
③ 设置之后需要重启防火墙
firewall-cmd --reload
Nginx常用命令
使用命令的前提是需要进入 nginx 目录中:cd /usr/local/nginx/sbin
- 查看 nginx 版本号 ./nginx -v
- 启动 nginx ./nginx
- 关闭 nginx ./nginx -s stop
- 重新加载nginx ./nginx -s reload //不需要重启服务器,nginx命令也能重新加载5.
- 若遇到
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
错误,解决方法:
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
配置文件
- 位置
vim /usr/local/nginx/conf/nginx.conf
- 配置文件中的内容(包含三部分)分别为 全局块、events 块、http 块。
全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。
比如:worker_processes 1
这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的制约。
events 块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接。
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024.
http 块
这算是 Nginx 服务器配置中最频繁的部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
需要注意的是:http 块也可以包括 http 全局块、server 块。
① http 全局块
http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
② server 块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
反向代理实例
实现效果
打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页
准备工作
- 在 liunx 系统安装 tomcat,使用默认端口 8080
- tomcat 安装文件放到 liunx 系统中,解压
- 进入 tomcat 的 bin 目录中,./startup.sh 启动 tomcat 服务器
- 查看tomcat是否启动:进入logs目录,输入tail -f catalina.out
- 对外开放访问的端口
使用firewall-cmd --add-port=8080/tcp --permanent
命令将tomcat端口对外进行开放。 - 在 windows 系统中通过浏览器访问 tomcat 服务器
进行以上步骤之后即可在windows浏览器中输入http://192.168.23.129:8080/
访问tomcat首页
访问过程分析
具体配置
第一步 在 windows 系统的 host 文件进行域名和 ip 对应关系的配置
位置如下:C:\Windows\System32\drivers\etc
添加如下内容:
测试如下:在windows中的浏览器输入http://www.123.com:8080/
第二步 在 nginx 进行请求转发的配置(反向代理配置)
在nginx的配置文件中
最终测试
首先启动nginx:cd /usr/local/nginx/sbin
,然后 ./nginx
在windows中的浏览器中输入www.123.com即可直接访问tomcat目录。
反向代理实例2
实现效果
使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001,
访问 http://192.168.23.129:9001/test1/a.html
直接跳转到 127.0.0.1:8080
访问 http:// 192.168.23.129:9001/test2/a.html
直接跳转到 127.0.0.1:8081
准备工作
1.配置两个tomcat
创建两个文件夹分别为:tomcat8080,tomcat8081。其中第一个对外访问的端口号为8080,第二个为8081。将tomcat8081文件夹中tomcat进行解压,进入conf目录,使用vim server.xml,修改配置文件,
修改以上三处配置文件,并保存启动tomcat。
在windows下浏览器中输入192.168.23.129:8080 以及192.168.23.129:8081 进行访问。
2.创建文件夹和测试页面
分别在两个tomcat的webapps目录中创建test1和test2两个文件夹,在两个文件夹中创建一个html文件用于测试访问。
具体配置
(1)找到 nginx 配置文件,进行反向代理配置
进入nginx目录下的conf中,然后vim nginx.conf,加入以下这句话:
测试结果
负载均衡实例
实现效果
浏览器地址栏输入地址 http://192.168.23.129/demo/a.html,负载均衡效果,把请求平均分担到 8080
和 8081 端口中。
准备工作
(1)准备两台 tomcat 服务器,一台 8080,一台 8081
(2)在两台 tomcat 里面 webapps 目录中,创建名称是 demo文件夹,在 demo文件夹中创建
页面 a.html,用于测试.
在 nginx 的配置文件中进行负载均衡的配置
进入 cd /usr/local/nginx/conf
目录下的nginx.conf进行修改
在http块中加入:
在server块中加入:
测试结果
点击刷新按钮,会切换到不同的服务器
nginx 分配服务器策略
第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
第二种 weight
weight 代表权重默认为 1,权重越高被分配的客户端越多。
在 /usr/local/nginx/conf目录下配置nginx.conf中的upstream时:
可以加上weight:
第三种 ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决session共享的问题。
在 /usr/local/nginx/conf目录下配置nginx.conf中的upstream时:
加入 ip_hash
第四种 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
在 /usr/local/nginx/conf目录下配置nginx.conf中的upstream时:
加入fair
动静分离
动静分离从目前实现角度来讲大致分为两种:
一种是纯粹把静态文件独立成单独的域名,放在单独的服务器上,也是目前主流推崇的方案;
另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200。
准备工作
在 liunx 系统中准备静态资源,用于进行访问:
在根目录下创建testData文件夹,在此文件夹下创建两个子文件夹:www和image,分别在两个子文件夹中创建a.html和1.txt两个静态资源。
具体配置
在 nginx 配置文件中进行配置
最终测试
(1)浏览器中输入地址
http://192.168.23.129/image/
http://192.168.23.129/www/a.html
nginx 原理&优化参数配置
master和worker
master和worker是nginx中的两个进程,启动nginx中可以看到:
work如何进行工作的
- 一个master&多个workers 的机制的好处
1、有利于nginx -s reload热部署,利用nginx进行热部署操作:
当进行热部署时,已经在工作的worker继续做当前的事情,其他woker进行热部署。当正在工作的worker完成工作后,再去进行热部署。
2、每个work是独立的进程,如果其他的work出现了问题;那其他的workr是独立的,会继续挣强请求,就不会造成服务的中断
3、采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的worker 进程。当然,worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当前 worker 上的所有请求失败,不过不会影响到所有请求,所以降低了风险。
-
需要设置多少个 worker
Nginx 同 redis 类似都采用了io 多路复用机制,每个 worker 都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话下。每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以worker 数和服务器的 cpu数(八核)相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗。 -
连接数 worker_connection
发送一个请求,占用worker几个连接数?
答案:两个或四个
解释:1.对于访问静态资源,worker直接向nginx发送请求并返回,一共两个。
2.对于反向代理,worker还需要tomcat发送请求并返回,一共四个。
搭载高可用集群(未完成)
在nginx请求如下
在上图过程中nginx服务器可能会出现宕机情况,搭载高可用集群可以解决此问题。
高可用:
1、需要两台+的nginx服务器
2、虚拟ip
3、keepalived
当主服务器挂了,就会自动切换备份服务器访问,这中间需要用到keepalived软件实时监测nginx服务器是否还活着。对外使用虚拟ip进行访问服务器,但虚拟ip实际是不存在的。
准备工作
(1)需要两台虚拟机 . …搞不来!
(2)两台服务器都安装nginx和keepalived
安装keepalived:
使用yum命令安装:yum install keepalived -y
安装之后,在 etc 里面生成目录 keepalived ,有文件 keepalived.conf