1.Nginx的概述
Nginx
是一款高性能的 http
服务器/反向代理服务器及电子邮件(IMAP/POP3
)代理服务器。由俄罗斯的程序设计师伊戈尔·西索夫(Igor Sysoev
)所开发,官方测试nginx
能够支支撑 5
万并发链接,并且 cpu、内存等资源消耗却非常低,运行非常稳定。
Nginx 应用场景:
- http 服务器。Nginx 是一个 http 服务可以独立提供 http 服务。可以做网页静态服务器。
- 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
- 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用
nginx
做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
2.Nginx在Linux下的安装
2.1 环境准备
1.需要安装 gcc 的环境
1 | yum install gcc-c++ |
2.第三方的开发包。
PCRE
PCRE(Perl Compatible Regular Expressions
)是一个 Perl
库,包括 perl
兼容的正则表达式库。nginx
的 http
模块使用 pcre
来解析正则表达式,所以需要在 linux
上安装 pcre
库。
1 | Centos7 : yum install -y pcre pcre-devel |
注:pcre-devel
是使用 pcre
开发的一个二次开发库。nginx
也需要此库。
zlibzlib
库提供了很多种压缩和解压缩的方式,nginx
使用 zlib
对 http
包的内容进行 gzip
,所以需要在 linux
上安装 zlib
库。
1 | yum install -y zlib zlib-devel |
OpenSSLOpenSSL
是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL
协议,并提供丰富的应用程序供测试或其它目的使用。nginx
不仅支持 http
协议,还支持 https
(即在 ssl
协议上传输 http
),所以需要在 linux
安装 openssl
库。
1 | yum install -y openssl openssl-devel |
2.2 Nginx下载
官方网站下载 [nginx:http://nginx.org/]
2.3 Nginx安装 (tar)包
第一步:把 nginx 的源码包nginx-1.8.0.tar.gz上传到 linux 系统
第二步:解压缩
1 | tar -zxvf nginx-1.8.0.tar.gz |
第三步:进入nginx-1.8.0
目录 使用 configure
命令创建一 makeFile
文件。
1 | ./configure \ |
执行后可以看到Makefile
文件
第四步:编译
1 | make在centos8的环境下回报错,在Ubuntu16.0.4 的环境下正常执行 |
第五步:安装
1 | make install |
2.4 Nginx启动与访问
注意:启动nginx
之前,上边将临时文件目录指定为/var/temp/nginx/client
, 需要在/var
下创建此 目录
1 | mkdir /var/temp/nginx/client -p |
进入到Nginx目录下的sbin目录
1 | cd /usr/local/ngiux/sbin |
输入命令启动Nginx
1 | ./nginx |
启动后查看进程
1 | ps aux|grep nginx |
地址栏输入虚拟机的IP即可访问(默认为80端口)
关闭 nginx:
1 | ./nginx -s stop |
重启 nginx:
1 | 1、先关闭后启动。 |
2.5 docker-compose启动
使用Docker
来安装和运行 Nginx
,docker-compose.yml
配置如下:
1 | version: '3.1' |
docker-compose.yml
,同级目录新建conf
,wwwroot
文件夹
1 | mkdir conf |
3. Nginx静态网站部署
3.1 什么是虚拟主机?
虚拟主机,也叫“网站空间”,就是把一台运行在互联网上的物理服务器划分成多个“虚拟”服务器。虚拟主机技术极大的促进了网络技术的应用和普及。同时虚拟主机的租用服务也成了网络时代的一种新型经济形式。
虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对外提供 www 服务,这样就可以实现一台主机对外提供多个 web 服务,每个虚拟主机之间是独立的,互不影响的。
通过 Nginx 可以实现虚拟主机的配置,Nginx 支持三种类型的虚拟主机配置
- 基于 IP 的虚拟主机
- 基于域名的虚拟主机
- 基于端口的虚拟主机
3.1.1 Nginx 配置文件的结构
1 | # 全局设置 |
注: 每个 server 就是一个虚拟主机
全局设置
1 | user nginx; worker进程运行的用户和组 |
events
1 | 指定工作模式和以及连接上限 |
use
指定nginx工作模式
- epoll 高效工作模式,linux
- kqueue 高效工作模式, bsd
- poll 标准模式
- select 标准模式
worker_connections
定义nginx每个进程的最大连接数
- 正向代理 连接数 * 进程数
- 反向代理 连接数 * 进程数 / 4
- linux系统限制最多能同时打开65535个文件,默认上限就是65535,可解除
ulimit -n 65535
http
最核心的模块,主要负责http
服务器相关配置,包含server,upstream
子模块
1 | include mime.types;设置文件的mime类型 |
server
用来指定虚拟主机
1 | listen 80; 指定虚拟主机监听的端口 |
location
核心中的核心,以后的主要配置都在这
主要功能:定位url
,解析url
,支持正则匹配,还能支持条件,实现动静分离
语法
1 | location [modifier] uri{ |
modifier
修饰符
- = 使用精确匹配并且终止搜索
- ~ 区分大小写的正则表达式
- ~* 不区分大小写的正则表达式
- ^~ 最佳匹配,不是正则匹配,通常用来匹配目录
常用指令:alias
别名,定义location
的其他名字,在文件系统中能够找到,如果location指定了正则表达式,alias将会引用正则表达式中的捕获,alias替代lication中匹配的部分,没有匹配的部分将会在文件系统中搜索
反向代理
1 | proxy_pass URL; 反向代理转发地址,默认不转发header, |
upstream
负载均衡模块,通过一个简单的调度算法来实现客户ip
到后端服务器的负载平衡
1 | upstream myproject{ |
负载均衡算法
- weight 负载权重
- down 当前server不参与负载均衡
- backup 其它机器全down掉或满载使用此服务
- ip_hash 按每个请求的hash结果分配
- fair 按后端响应时间来分(第三方的)
3.1.2 基于端口的虚拟主机配置
需求
- Nginx 对外提供 80 和 8080 两个端口监听服务
- 请求 80 端口则请求 html80 目录下的 html
- 请求 8080 端口则请求 html8080 目录下的 html
1. 创建目录及文件
在 /usr/local/docker/nginx/wwwroot
目录下创建html80
和 html8080
两个目录,并分辨创建两个 index.html
文件
2. 配置虚拟主机
修改Nginx 的配置文件:/usr/local/nginx/conf/nginx.conf
1 | server { |
3.访问测试
- 地址栏输入http://172.16.0.192:80 可以看到首页面
- 地址栏输入http://172.16.0.192:8080 可以看到注册页面
3.1.3 基于域名的虚拟主机配置
需求
- 两个域名指向同一台
Nginx
服务器,用户访问不同的域名显示不同的网页内容 - 两个域名是
www.zysheep.com
和regist.zysheep.com
Nginx
服务器使用虚拟机172.16.0.192
1. 域名与IP绑定:
- 一个域名对应一个 ip 地址,一个 ip 地址可以被多个域名绑定。
- 本地测试可以修改
hosts
文件(C:\Windows\System32\drivers\etc
) - 可以配置域名和
ip
的映射关系,如果hosts
文件中配置了域名和ip
的对应关系,不需要走dns
服务器。1
2172.16.0.192 www.zysheep.com
172.16.0.192 regist.zysheep.com
2. 创建目录及文件
在 /usr/local/docker/nginx/wwwroot
目录下创建 htmlservice
和 htmlweb
两个目录,并分辨创建两个 index.html
文件
3. 配置虚拟主机
做好域名指向后,修改nginx
配置文件
1 | server { |
执行以下命令,刷新配置
1 | ./nginx -s reload |
4.Nginx反向代理与负载均衡
4.1 反向代理
4.1.1 什么是反向代理
反向代理(Reverse Proxy
)方式是指以代理服务器来接受internet
上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet
上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
首先我们先理解正向代理,如下图:
正向代理是针对你的客户端,而反向代理是针对服务器的,如下图
4.1.2 使用 Nginx 反向代理 Tomcat
需求
- 两个
tomcat
服务通过nginx
反向代理 nginx
服务器:http://172.16.0.192:80
tomcat1
服务器:http://172.16.0.192:9090
tomcat2
服务器:http://172.16.0.192:9091
启动 Tomcat 容器
启动两个 Tomcat
容器,映射端口为 9090
和 9091
,docker-compose.yml
如下:
1 | version: '3' |
配置 Nginx 反向代理
修改 /usr/local/docker/nginx/conf
目录下的 nginx.conf
配置文件:
1 | user nginx; |
4.2 负载均衡
4.2.1 什么是负载均衡
负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡,英文名称为Load Balance
,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
4.2.2 Nginx 实现负载均衡
- nginx 作为负载均衡服务器,用户请求先到达 nginx,再由 nginx 根据负载配置将请求转发至 tomcat 服务器
- nginx 负载均衡服务器:172.16.0.192:80
- tomcat1 服务器:172.16.0.192:9090
- tomcat2 服务器:172.16.0.192:9091
4.2.3 Nginx 配置负载均衡
修改 /usr/local/docker/nginx/conf
目录下的 nginx.conf
配置文件:
1 | upstream tomcat-zysheep{ |
地址栏输入http:// www.zysheep.cn / 刷新观察每个网页的标题,看是否不同。
经过测试,三台服务器出现的概率各为33.3333333%,交替显示。
如果其中一台服务器性能比较好,想让其承担更多的压力,可以设置权重。
相关配置说明
1 | # 定义负载均衡设备的 Ip及设备状态 |
在需要使用负载的 Server 节点下添加
1 | proxy_pass http://tomcat-zysheep; |
upstream
:每个设备的状态:down
:表示当前的server
暂时不参与负载weight
:默认为1 weight
越大,负载的权重就越大。max_fails
:允许请求失败的次数默认为 1 当超过最大次数时,返回proxy_next_upstream
模块定义的错误fail_timeout
:max_fails
次失败后,暂停的时间。backup
:其它所有的非backup
机器down
或者忙的时候,请求backup
机器。所以这台机器压力会最轻