nginx概念
1、Nginx是什么,做了什么事情
Nginx(“engine x”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好,Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。
2、反向代理
(1)、正向代理:在客户端(浏览器)配置代理服务器,通过代理服务器进行访问互联网访问。
(2)、反向代理:我们只需要将请求发送到反向代理服务器,由反向代理服务器(例如端口是 9001)去选择目标服务器(例如 Tomact 服务器 端口8001)获取数据后,在返给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
3、负载均衡
单个服务器(例如反向代理服务器 9001)解决不了,我们增加服务器数量(例如 8001、8002、8003),然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器上,也就是我们所说的负载均衡。
4、动静分离
为了加快网站的解析速度,可以把动态页面(jsp、servlet)和静态页面(html、css、js)有不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
nginx安装
1、在windows系统中安装Nginx
默认安装即可,稳定版本我这边使用的是1.12.2版本,然后在当前的文件夹中使用命令行输入nginx.exe即可启动,停止的话可以使用nginx -s stop,重新加载的话可以使用nginx -s reload
2、在Linux系统中安装Nginx
首先先安装一下nginx的相关依赖,安装pcre依赖,把安装文件放到Linux系统中,解压压缩文件,进入解压之后目录,执行 ./cinfigure,使用 make && make install (编译并且安装当前文件)。安装其他的依赖使用命令:yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel。在Linux系统中的命令一般常用的是 ./nginx(启动)、./nginx -s stop(关闭)、./nginx -s reload(重新加载)
3、Nginx配置文件
(1)、Nginx配置文件在Linux系统中的位置
/usr/local/nginx/conf/nginx.conf
(2)、Nginx配置文件由三部分组成
第一部分:全局块。
从配置文件开始到 events 块之间的内容,主要会设置一些影响Nginx服务器整体运行的配置指令。例如:worker_processes 1; 表示: worker_processes值越大,可以支持的并发处理量也越多
第二部分:events块。
events 块涉及的指令主要影响Nginx服务器与用户的网络连接
例如:worker_connections 1024; 支持的最大连接数(灵活配置)
第三部分:http块
Nginx服务器配置中最频繁的部分
http 块也可以包括 http全局块、server块
应用场景
反向代理-1
1、实现效果
(1)、打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转 Linux 系统 Tomcat 主页面中
2、准备工作
(1)、在Linux系统中安转Tomcat,使用默认端口 8080。
Tomcat安转文件放到Linux系统中,解压。
进入Tomcat的bin目录中,./startup.sh启动Tomcat服务器。停止Tomcat服务可以使用 ./shutdown.sh或者kill -9 2982(id)
(2)、对外开放访问的端口
firewall -cmd --add-port=8080/tcp --permanent(开放端口号)
firewall -cmd --reload(重启防火墙)
firewall -cmd --list-all(查看已经开放的端口号)
(3)、在windows系统中通过浏览器访问Tomcat服务器
3、访问过程的分析
首先通过 windows浏览器(windows的host文件进行配置,配IP地址,先本地文件进行查找,没有的话在通过网络的DNS解析 去查找IP地址) => Nginx服置域名映射的务器(暴露的IP地址例如:192.168.17.129:80) => Tomcat服务器(不暴露的IP地址127.0.0.1:8080)。
4、具体配置
第一步 在windows系统的host文件进行域名和IP对应关系的配置(文件地址去Windows/system32/drivers/etc/HOST文件,添加你需要配置的IP和域名 10.180.0.37 www.xyl.com )。
第二步 在Nginx进行请求转发的配置(反向代理配置)
在 server 块的地方修改 server_name 修改成Nginx的IP地址,location 模块加一个配置属性 proxy_pass Tomcat的服务器IP地址加端口号例如:http://127.0.0.1:8080;
反向代理-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)、准备工作
(2.1)、准备两个Tomcat服务器,一个8080端口,一个8081端口。
(2.2)、创建文件夹和测试页面
(3)、具体配置
(3.1)、找到Nginx配置文件,进行反向代理配置在到Nginx配置文件中的conf文件中的server块进行两个location配置使用正则匹配,例如 listen 监听端口号 9001(测试用的端口号 9001)server_name IP地址(Nginx服务IP), location ~ /文件名/ { proxy_pass http:// Tomcat服务IP加端口 } location ~ /文件名/ { proxy_pass http:// Tomcat服务IP加端口 }
负载均衡
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文件中的http全局块中加一个 upstream myserver(这个名字可自定义起){ server TomcatIP加端口(8080)可以加weight进行权重分配weight越大被分配的客户端越多,也可配置ip_hash的方式进行服务器分配,添加fair方式也可以进行服务器分配时间越短分配越快, server TomcatIP加端口(8081) },然后再server块地方 server_name 改成 TomcatIP,在location中加上一个proxy_pass http://myserver(这个名字可自定义起)。
4、Nginx分配服务器策略
第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后台服务器,如果后端服务器down掉,能自动剔除。
第二种 weight
weight代表权重默认为1,权重越高被分配的客户端越多
第三种 ip_hash
每个请求按访问IP的hash的结果分配,这样每个方可固定访问一个后端服务器,解决session的问题。
第四种 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配
动静分离
1、什么是动静分离
通过location指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以使浏览器缓存过期,减少与服务器之间的请求和流量。具体expires定义:是给一个资源设定一个过期时间,也就是说无需去服务器验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用expires来缓存),我这里设置 3d ,标识在这3天内访问这个url,发送一个请求,比如服务器该文件最后更新时间没变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载返回状态码200。
2、准备工作
(1)、在Linux系统中准备静态资源,用于访问
3、具体配置
(1)、在Nginx配置文件中进行配置
在server块中的location地方去配置相关的属性配置例如:
location /Linux系统中存放的静态文件名/ { root /data/; index index.html index.html; }
location /Linux系统中存放的静态文件名/ { root /data/; autoindex on; }
也可在当前的配置中添加个 expires 3d;表示测试缓存
4、最终测试
(1)、浏览器输入地址:http://NginxIP地址/Linux系统中的文件名字/Linux系统中的静态资源,如果输入:http://NginxIP地址/Linux系统中的文件名字,会把当前的文件内容显示出来因为在Nginx配置中配置了 autoindex on; 这个属性。
(2)、在浏览器的地址栏中输入地址
http://NginxIP地址/Linux系统中的文件名字/Linux系统中的静态资源
高可用集群
1、什么是Nginx高可用
(1)、需要两台Nginx服务器(主服务MASTER和备用服务BACKUP或者叫从服务)
(2)、需要keepalived(类似路由缓存服务)
(3)、需要虚拟ip
2、配置高可用的准备工作
(1)、需要两台服务器
(2)、在两台服务器上面安装Nginx
(3)、在两台服务器上安装keepalived
3、在两台服务器上安装keepalived
(1)、使用yum命令安装:yum install keepalived -y;检查是否安装命令:rpm -q -a keepalived;
(2)安装之后,在etc里面会生成目录keepalived,有文件keepalived.conf配置文件
4、完成高可用的配置(主从配置)
(1)、修改/etc/keepalived/keepalived.conf配置文件
(2)、在/usr/local/src添加检测脚本
(3)、把两台服务器上的Nginx和keepalived启动
启动Nginx:./nginx
启动keepalived:systemctl start keepalived.service
5、最终测试
(1)、在浏览器地址栏中输入虚拟的ip地址(在keepalived.conf配置文件中配置的虚拟ip地址)
(2)、把主服务器Nginx和keepalived停止,在输入虚拟的ip地
6、Nginx中高可用的keepalived.conf配置文件的解析
第一部分 global_defs 全局配置
其中的router_id 访问到主机或者服务器(在hosts文件中配置的ip 加名字)
第二部分 script (解析Nginx中的配置文件)
script 检测脚本的位置,interval 2 (检测脚本的执行间隔),weight 2(权重,当脚本的条件成立就把当前的服务增加或者降低,让从服务器或者备份服务器成主服务器)
第三部分 vrrp_instance VI_1 虚拟ip的配置
state 状态 主服务(MASTER)从服务器(BACKUP)。
interface ens33 (网卡,检测网卡:ifconfig)。
virtual_router_id 主、备机的 virtual_router_id 必须相同。
priority 90 主、备机取不同的优先级,主机值较大,备份机值较小。
advert_int 1 时间间隔,每隔多少时间执行一次。
authentication { auth_type 用户名 auth_pass 密码 }
virtual_ipaddress { 虚拟机ip地址可以写多个 }
执行原理
1、master和worker
2、worker是如何进行工作的
3、一个master和多个worker有哪些好处
(1)、可以使用 Nginx -s reload(热部署方式)利于Nginx进行热部署操作。
(2)、每个worker是独立的进程,如果有其中一个worker出现问题,其他的worker还可以继续争抢,实现请求过程,不会造成服务的中断。
4、设置多少个worker合适
worker数和服务器的cpu数相等是为最合适的(先检查一下当前电脑的cpu是多少)
5、连接worker_connection
第一个:发送请求,占用了worker的几个连接数?答案:2或者4个。(解析:发送请求访问静态资源然后返回这样是2个,如果访问动态资源查询数据库就得使用到Tomcat服务器去查询数据库数据信息再返回到服务再返回到客户端,就是4个)。
第二个:Nginx有一个master,有四个worker,每个worker支持最大的连接数据1024,支持的最大并发数是多少?
普通的静态访问最大并发数是:worker_connections(worker最大连接数)worker_processes(有几个worker)/2
如果是http作为反向代理的话,最大连接数量应该是 worker_connectionsworker_processes/4
如果是http作为反向代理的话,最大连接数量应该是 worker_connectionsworker_processes/4
nginx配置文件主要配置对象如下
# 最大连接数 -- 高并发时候使用
events {
worker_connections 1024;
}
http {
# 负载均衡
upstream 负载均衡的名称 {
server 服务器 weight=1; 负载均衡权重比例
server 服务器 weight=2; 负载均衡权重比例
}
server {
# 监听的端口 http 默认端口80 https 是 443
listen 80;
# 服务名称可以随便起
server_name localhost;
# 访问界面的根路径或者自己添加链接
location ~ /映射的文件名访问(没加文件名默认是/){
root html;
index index.html index.htm;
# 代理的服务地址(如果前端本地起那就这个地方写前端的启动项目的地址信息)
proxy_pass 启动项目的服务(前端的话就是前端地址若是直接在环境上跑的话就是环境的地址服务);
# 重写路径并代理到对应的地址(url)
rewrite ^/abc 启动项目的服务;
}
# 代理的服务器地址配置(看后端配置是以什么开头的url路径)
location ~ /跟后端的配置相关(路径开头例如:api)/ {
root html;
index index.html index.htm;
# 代理目标服务地址(后端启动的服务,只是访问他的ip加端口)
proxy_pass 服务器;
}
}
}
以上是配置代理的主要部门模块,其实nginx还有很多配置项,大家可以去搜一下nginx配置项,这边就不一一给大家介绍了,都有相应的使用教程,只要用的比较多的就是反向代理和负载均衡。