Nginx的基本概念(由浅入深)
1、nginx基本概念
(1)nginx是什么,做什么事情。
Nginx("engine x”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。(nginx支持热部署)
(2)反向代理
1.正向代理
在客户端(浏览器)配置代理服务器,通过 代理服务器进行互联网访问。
2.反向代理
我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址(端口为9001的),隐藏了真实服务器IP地址(端口为8001)。
![]()
3.负载均衡
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
![]()
4.动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析(分开部署),加快解析速
度。降低原来个服务器的压力。
动静分离之前:
动静分离之后:
![]()
2、nginx安装、常用命令和配置文件。
(1)在liunx系统中安装nginx
1.使用远程的连接工具连接linux系统
nginx安装之前相关的素材(依赖)
(1)安装pcre依赖
把安装压缩文件放到linux系统中.
解压压缩文件tar -xvf pcre-8.37.tar-gz
进入解压之后目录,执行./configure
使用make &&make install
安装之后,使用命令,查看版本号pcre-config --verison.
(2)安装其他的依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
(3)安装nginx
(1)把nginx安装文件放到linux系统中.
(2)解压压缩文件
(3)进入解压之后目录,执行configure
(4) 使用 make && make install
安装成功之后,在usr多出来一个文件夹local/nginx,在nginx有sbin有启动脚本
防火墙端口规则:
查看开放的端口号
firewall-cmd--list-all.
设置开放的端口号
firewall-cmd--add-servipe-http -permanent
增加其他端口号 sudo firewall-cmd -add-port=80/tcp --permanent重启防火墙firewall-cmd -reload
(2)nginx常用命令
1.使用nginx操作命令前提条件:必须进入nginx的目录/user/local/nginx/sbin
2.查看nginx的版本号
./nginx -v
3.启动nginx
./nginx
4.关闭nginx
./nginx -s stop
5.重新加载nginx
./nginx -s reload
![]()
(3)nginx配置文件
1.nginx配置文件位置
在user/local/nginx/conf/nginx.conf
2.nginx配置文件组成
(1)nginx配置文件有三部分组成
第一部分:全局块
从配置文件开始到events 块之间的内容,主要会设置一些影响nginx 服务器公运了的令
比如worker processes 1;worker_processes 值越大,可以支持的井发处理量也越多
第二部分:events块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接
比如 worker_connections1024;支持的最大连接数
第三部分:http块
nginx服务器配置中最频繁的部分
需要注意的是:http块可以包括http全局块、server块
http全局块:
http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。.
server块:
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
每个http块可以包括多个服务器块,而每个服务器块就相当于一个虚拟主机。
而每个服务器块也分为全局服务器块,以及可以同时包含多个位置块。
1、全局server块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。·
2、 location块
一个服务器块可以配置多个位置块。
这块的主要作用是基于Nginx服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的/uri-string)进行匹配,对特定的请求进行处理.地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
3、nginx的配置示例1.1-反向代理
1.实现效果
(1)打开浏览器,在浏览器地址栏输入地址www.123.com,跳转iunx系统tomcat主页面2.中
2.准备工作
(1)在liunx系统安装tomcat,使用默认端口8080,tomcat安装文件放到liunx系统中,解压.
进入tomcat的bin目录中,./startup.sh启动tomcat服务器
(2)对外开放访问的端口.
firewall-cmd --add-port=8080/tcp --permanent(以8080为例)
firewall-cmd -reload(重启防火墙)
查看已经开放的端口号firewall-cmd --list-all
(3)在 windows系统中通过浏览器访问tomcat服务器.
3.访问过程的分析
4.具体配置
第一步在windows 系统的host文件进行域名和ip对应关系的配置.
添加内容再host文件中:
第二步:在nginx进行请求转发的配置(反向代理配置)
4、nginx的配置示例1.2-反向代理
1、实现效果
使用nginx反向代理,根据访问的路径跳转到不同端口的服务中nginx监听端口为9001,
访问 http://127.0.0.1:9001/edu/直接跳转到127.0.0.1:8081
访问 http://127.0.0.1:9001/vod/直接跳转到127.0.0.1:8082.
2.准备工作
(1)准备两个tomcat服务器,一个8080端口,一个8081端口.
(2)创建文件夹和测试页面
在两个短口的此路径下建vod 和edu文件夹 分别放入不同的页面(我放的是8080 和8081)
3.具体配置
(1)找到nginx配置文件,进行反向代理配置
如果路径中包含edu就到8080端口中去,如果路径中包含vod就到8081端口中去
(2)开放对外访问的端口号 9001 8080 8081
4.测试
location指令:该指令用于匹配URL
语法:
5、nginx的配置示例2-负载均衡
1.实现效果
(1)浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均8080
和8081端口中
2.准备工作
(1)准备两台(或者多台)tomcat服务器,一台8080一台8081
(2)在两台tomcat里面webapps目录中,创建名称是edu文件夹(两个都是edu名称),在文件夹中创建a.html页面,用于测试
3.在nginx.conf的配置中设置负载均衡
4.nginx分配服务器的策略
第一种:轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
第二种:weight(权重策略,默认为1,权重越高分配的客户端越多)
第三种:ip_hash
每个请求按访问ip的hash结果分配,这样每个访客國定访问一个后端服务器,第一次访问的是 8080 的服务器 后面越是8080的服务器,可以解决session共享的问题
第四种:fair(第三方)
按后端服务器的响应时间分配,响应时间短的优先分配
5、nginx的配置示例3-动静分离
1.什么是动静分离
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat处理动态页面。动静分离从目前实现角度来讲大致分为两种,
种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx来分开。
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires参数设置,可以使浏
览器缓存过期时间,减少与服务器之前的请求和流量。具体Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires 来缓存),我这里设置 3d,表示在这3天之内访问这个URL,发送个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,
如果有修改,则直接从服务器重新下载,返回状态码 200。
2.准备工作
(1)在liunx系统中准备静态资源用于进行访问
3.具体配置
在nginx.conf配置文件中配置 然后重启文件
4.最终测试
(1)在浏览器中输入地址
因为配置文件autoindex on表示列出文件夹的位置
(2)在浏览器中输入地址
6、nginx配置高可用集群
1.什么是nginx的高可用
若一台nginx宕机则不能运行,所以用 高可用弄一个主nginx和一个备份nginx
(1)需要两台nginx服务器
(2)需要keepalived
(3)需要虚拟ip
2.配置高可用的准备工作
(1)需要两台nginx服务器192.168.17.129和192.168.17.131(根据自己的虚拟机弄ip)
(2)在两台服务器中安装nginx
(3)在两台服务器中安装keepalived
先安装需要的依赖根据上面 安装nginx的步骤完成
3.在两台服务器中安装keepalived
(1)使用yum命令进行安装
yum install keepalived -y 安装命令
rpm -q -a keepalived 查看安装版本
(2)安装之后在etc里面,生成目录 keepalived 有个keepalived.conf配置文件
4.完成高可用配置(主从配置)
(1)修改/etc/keepalived/keepalivec.conf配置文件.
(2)/usr/local/src添加检测脚本
(3)把两台服务器中的nginx和keepalived启动
启动nginx:./nginx
启动keepalived:systemctl start keepalived.service此路径下启动
5.最终测试
(1)在浏览器地址栏中输入虚拟ip地址 192.168.17.50
(2)把主服务器(192.168.17.129)nginx和keepalived停止,在输入地址
7、nginx执行原理
1.master进程 和worker进程
2.worker是如何进行工作的
3.一个master和多个worker有什么好处
(1)可以使用nginx -s reload热部署命令,利于nginx热部署操作
(2)每个worker是独立的进程,如果其中的一个worker出现问题,其他worker独立的继续进行争抢,实现请求过程,不会造成服务中断
4.设置多少个worker才合适
worker数和服务器的cpu数相等是最为适宜的
5.连接数 worker_connection
第一个:发送请求,占用了worker的几个连接数
答案:2或者4个
第二个:nginx有一个master,有四个worker,每个worker支持最大的连接数据1024,支持的最大并发数是多少?
答案:
普通的静态访问最大并发数是:worker_connections*worker_processes /2,
而如果是HTTP作 为反向代理来说,最大并发数量应该是 worker_connections
worker_processes/4
