Nginx
nginx介绍
1.nginx的概念
nginx专为性能优化而开发,它也是高性能的 HTTP 和反向代理的服务器,处理高并发的能力非常好
2.正向/反向代理
正向代理代理的对象是客户端,反向代理代理的对象是服务端
3.负载均衡
将从客户端发来的请求分发到多个服务器上,将原先请求集中到单个服务器上的情况
改为将请求分发到多个服务器上,将负载分发到不同的服务器
- 负载均衡的体现
4.动静分离
动静分离简单来说就是将动态请求和静态请求进行分开,把动态页面和静态页面的请求由不同的
服务器来解析,加快解析速度,以降低原来单个服务器的压力
安装nginx
1.进入nginx官网 –> 官方下载网址
1 | //安装nginx之前需要先安装相关的依赖和库 |
使用nginx
nginx常用命令
- 使用nginx的命令前提是必须进入nginx的/usr/local/nginx/sbin目录
1 | 1.查看nginx的版本 |
nginx配置文件
- nginx配置文件的位置个人习惯安装在此位置/usr/local/nginx/conf/nginx.conf
1.nginx的配置文件由三部分组成
①全局块
从配置文件开始到 events 块之间的内容,主要会设置一些影响 nginx 服务器整体运行的配置指令,
主要包括配置运行Nginx服务器的用户(组)、允许生成的 worker process 数,进程PID存放路径、
日志存放路径和类型以及配置文件的引入等。
worker_processes 1; Nginx并发处理服务的关键配置,值越大,其并发处理能力越强
②event块
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接
worker_connections 1024; 表示每个 work process 支持的最大连接数为 1024.
③http块
- 代理、缓存和日志定义等大部分功能都在这里配置。且http块又包括http 全局块、server 块。
Ⅰ.http全局块内容包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
Ⅱ.server 块
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
location 块
一个 server 块可以配置多个 location 块。
这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),
对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,
对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置。
nginx配置实例
准备工作:下载tomcat与jdk(暂时使用默认内置的jdk)
- tomcat的安装与使用
1 | 1.安装tomcat(两种方式) |
反向代理
1.示例一 使用 nginx 反向代理,访问 test.dzsc.tk 直接跳转到 127.0.0.1:8080
在nginx.conf设置反向代理配置
1 | location / { |
2.示例二 使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001,
访问 http://localhost:9001/edu/ 直接跳转到 localhost:8080
访问 http://localhost:9001/vod/ 直接跳转到 localhost:8081
- 需要准备两个tomcat(与前面tomcat安装一样)以及两个页面
在nginx.conf设置反向代理配置
需要注意的是所有端口都需要在防火墙进行开放
1 | server { |
location 指令说明
该指令用于匹配 URL。
语法如下:location [= | ~ | * | ^ ] uri {}
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字
符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location
块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
负载均衡
1.示例一
浏览器地址栏输入地址 http://localhost/edu/a.html ,负载均衡效果,平均8080和8081端口中
在 nginx 的配置文件中进行负载均衡的配置
1 | //myserver就是自定义的一个服务名,对外暴露服务,而服务下有两台机器,自动实现轮询访问 |
- nginx分配服务器策略
第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
第二种weight
weight代表权重默认为1,权重越高被分配的客户端越多
第三种ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器
第四种fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
动静分离
- 动静分离示意
通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏
览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源
设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,
所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,
不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一个
请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,
如果有修改,则直接从服务器重新下载,返回状态码 200。
在nginx.conf设置动静分离配置
autoindex on;这个设置会在访问/image/页面时列出文件夹中的所有资源内容
1 | location /www/ { |
高可用集群
高可用集群解决的问题是什么?当只有一台nginx服务器时,宕机后会导致所有请求失败
- 配置高可用集群步骤
①使用两台服务器安装两台nginx
②安装keepalived yum install keepalived –y
查看keepalived版本 rpm -q -a keepalived
安装之后,在etc里面生成目录keepalived,有文件 keepalived.conf
③完成高可用的文件配置(主从配置)
修改/etc/keepalived/keepalivec.conf配置文件
并在当前目录下执行 chmod 644 keepalived.conf 给予权限
1 | # 全局定义 |
在/usr/local/src 添加检测脚本
并在当前目录下执行 chmod 744 /usr/local/src/nginx_check.sh 给予权限
1 | #!/bin/bash |
④把两台服务器上nginx和keepalived启动
启动nginx:./nginx
启动keepalived:systemctl start keepalived.service
nginx原理
- master的工作流程
- worker的工作流程
- 一个master和多个woker的好处
①可以使用nginx –s reload热部署,利用nginx进行热部署操作
②每个woker是独立的进程,如果有其中的一个woker出现问题,其他woker独立的,
继续进行争抢,实现请求过程,不会造成服务中断
worker数和服务器的cpu数相等是最合适的
发送请求,占用了 woker 的2 或者 4 个连接数(worker_connection)
①请求的是静态资源的话nginx会直接请求静态资源服务器,一来一回只需要2个连接数
②而如果请求的是非静态以及涉及数据库查询,因为work是不支持java的,就需要
再发送请求到tomcat,一来一回又多占用2个请求,所以是4个连接数
- nginx有一个master,有多个woker,每个woker支持最大连接数为1024,则最大并发数是?
普通的静态访问最大并发数是: worker_connections * worker_processes /2
如果是HTTP作 为反向代理那最大并发数量是 worker_connections * worker_processes/4