- Nginx简介
- Nginx发展介绍
- Nginx作者
- 正向代理和反向代理概念
- 网站代理服务器查看
- Nginx环境搭建
- 下载
- 安装前准备
- 安装
- 启动
- 检测Nginx是否启动
- 关闭
- 重启
- Nginx核心配置文件说明
- Nginx主要功能
- 1、静态网站部署
- 2、负载均衡
- 负载均衡概述
- 负载均衡实现方式
- Nginx负载均衡策略
- 负载均衡其他配置
- 3、静态代理
- 静态代理实现方式
- 4、动静分离
- 5、虚拟主机
- 配置虚拟主机方式
Nginx简介
Nginx发展介绍
Nginx 是一个高性能的(静态)Web服务器
和反向代理服务器
,也可以作为邮件代理服务器。
Nginx特点是占用内存少,并发处理能力强,以高性能、第系统资源消耗而闻名,Nginx官方测试为5万并发请求。与Nginx同类型的Web服务器还有Apache Lighttpd、Tengine(阿里巴巴的)等。国内互联网中大量使用了Nginx,比如新浪、网易、美团、搜狐等。
Nginx是免费开源的,同时Nginx也有收费的商业版本,商业版本提供了性能优化、宕机等紧急问题处理等技术支持和服务。
传统方式:
问题:tomcat连接数量有上限,超过之后其他人访问就要排队了,用户体验下降
改进:建立tomcat集群,采用Nginx进行反向代理。
Nginx作者
伊戈尔·赛索耶夫,俄罗斯,c语言开发的
正向代理和反向代理概念
反向代理(Reverse Proxy) 方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器;
正向代理 类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某个网站,但是我能访问一个代理服务器,这个代理服务器,它能帮我访问我访问不了的网站,于是我先连上代理服务器,告诉他我需要访问的网站,代理服务器去取回来,返回给我。
总结:正向代理代理对象是客户端
,反向代理代理对象是服务端
网站代理服务器查看
- 淘宝:tengine
- 网易:nginx
Nginx环境搭建
下载
免费开源网站:http://nginx.org
下载Linux版本的nginx-1.14.2.tar.gz
方式一:直接在Linux输入命令 wget http://nginx.org/download/nginx-1.14.2.tar.gz
方式二:先下载下来,再上传到linx服务器的/home/soft/目录下
安装前准备
Nginx的安装需要确定Linux安装相关的几个库,否则配置和变异会出现错误;
执行下面命令:(如果存在则跳过,不存在就下载)
yun install gcc openssl-devel pcre pcre-devel zlib zlib-devel -y
安装
- 解压下载下来的nginx文件
tar -zxvf nginx-1.14.2.tar.gz
- 切换至解压后的nginx主目录
cd nginx-1.14.2
- 安装到指定安装路径下
./configure --prefix=/user/local/nginx
- 编译
make
- 安装
make install
安装成功后,可以切换到/user/local/nginx目录下,查看nginx内容:
- conf/nginx.conf :主配置文件
- html/50x.html:错误页面
- html/index.html:欢迎首页面
- logs/:日志文件存放目录
- sbin/nginx:启动命令
上述过程如下:
启动
-
普通启动
切换到nginx安装目录的sbin目录下,执行./nginx
-
配置文件启动
sbin目录下执行./nginx -c /user/local/nginx/conf/nginx.conf -t
或者直接执行/user/local/nginx/sbin/nginx -c /user/local/nginx/conf/nginx.conf -t
其中 -c 指定配置文件,且配置文件路径必须是绝对路径
其中 -t 是检查配置文件,可以知道配置文件是否正确
检测Nginx是否启动
- 查看进程:
ps -ef | grep nginx
nginx体系结构由 master 进程和其 worker 进程组成
master 进程读取配置文件,并维护 worker 进程,而 worker 进程则对请求进行实际处理 - 在浏览器输入
http://服务器![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128175150122.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzkxMzA0Mg==,size_16,color_FFFFFF,t_70) ip地址:80
访问Nginx服务器,出现界面(关闭防火墙)
关闭
-
优雅关闭
找出nginx进程号:ps -ef | grep nginx
杀死master进程:kill -QUIT master-pid
-
快速关闭
找出nginx进程号:ps -ef | grep nginx
杀死master进程:kill -TERM master-pid
优雅关闭:命令执行后,nginx服务器不再接收请求,但要把之前的请求处理完毕之后再关闭,可能需要一段时间。
快速关闭:命令执行后,nginx服务器不管请求是否处理完成,直接关闭,比较暴力,快速快。
使用kill -9 pid 只能杀死一个pid进程,比如杀死master进程,但worker进程还在,所以就不要用 -9 了。
重启
执行命令 nginx -s reload
,包含关闭和启动两个操作。
Nginx核心配置文件说明
Nginx核心配置文件在Nginx安装目录/user/local/nginx/conf目录下,名为nginx.conf。
Nginx核心配置文件主要由三部构成:
- 基础配置
- events配置
worker_connections最大65535
nginx并发量=worker_processes x worker_connections
- http配置
一个http里面可能有多个server,保证多个server的端口号和服务名不完全一样即可:
Nginx主要功能
1、静态网站部署
Nginx 是一个 HTTP 的 Web 服务器,可以将服务器上的静态文件
(如HTML、图片等)通过 HTTP 协议返回给浏览器客户端。
- 在服务器
/opt/www/ace/
目录下部署静态资源login.html
- 修改nginx核心配置文件,位于/user/local/nginx/conf/
nginx.conf
注意:root 的值(/opt/www
)对应 /ace 中/
的值,所以,当请求的 url 为/ace
时,请求资源路径为/opt/www/ace
。 - 启动nginx,浏览器访问:
http://服务器ip地址:80/ace
2、负载均衡
负载均衡概述
网站创立初期,一般使用单机对外提供集中式服务。随着业务量增大,一台服务器不够用,此时就回把多台机器组成一个集群提供对外服务,但是,我们的网站对外提供的访问入口通常只有一个,比如 www.web.com。那么当用户在浏览器上输入www.web.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情。
负载均衡通常是指将请求“均匀”分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀。
负载均衡实现方式
- 硬件负载均衡
比如 F5、深信服、Array 等
优点:有厂商专业的技术服务团队提供支持,性能稳定
缺点:费用昂贵,对于规模小的网络应用成本高 - 软件负载均衡
比如 Nginx、LVS、HAProxy
优点:免费开源、成本低廉 - Nginx负载均衡
Nginx通过在nginx.conf文件进行配置,即可实现负载均衡(默认轮询策略)
upstream是配置nginx与后端服务器负载均衡非常重要的一个模块,并且它还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障机器。
Nginx负载均衡策略
- 轮询(默认)
upstream backserver{server 192.168.0.1:80;server 192.168.0.2:80;
}
注意:这里的轮询并不是每个请求轮流分配到不同的后端服务器,与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景。如果后端服务器down掉,将自动提出
- 权重
upstream backserver{server 192.168.0.1:80 weight=5;server 192.168.0.2:80 weight=2;
}
每个请求按一定比例分发到不同的后端服务器,weight 值越大访问的比例越大,用于后端服务器性能不均匀的情况。
weight值5和2,代表服务器192.168.0.1处理5个请求的时间和服务器192.168.0.2处理2个请求的时间是一样的。
- ip_hash
算法:hash(“192.168.0.1”)%2=0,1
upstream backserver{ip_hash;server 192.168.0.1:80 weight=5;server 192.168.0.2:80 weight=2;
}
ip_hash也叫做IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失问题。但可能会导致某台服务器压力过大。
- 最少连接
upstream backserver{least_conn;server 192.168.0.1:80 weight=5;server 192.168.0.2:80 weight=2;
}
web请求会被转发到连接数量最少的服务器上。
负载均衡其他配置
- 配置1:
upstream backserver{server 192.168.0.1:80;# 其他所有的非backup机器down的时候,才会请求backup机器。server 192.168.0.2:80 backup;
}
- 配置2:
upstream backserver{server 192.168.0.1:80;# down表示当前server是down的状态,不参与负载均衡。server 192.168.0.2:80 down;
}
一般在项目升级的时候,可以先对backup服务器升级(用户访问不到),然后取消其backup状态,并设置其他服务器为down,再升级其他的服务器,升级完毕取消down的状态即可。然后对Nginx重新reload,reload不会影响用户的访问,或者可以给一个提示页面,系统正在升级。
3、静态代理
把所有静态资源的访问改为访问nginx,而不是访问tomcat,这种方式叫静态代理。因为nginx更擅长静态资源的处理,性能更好,效率更高。
所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理。
静态代理实现方式
方式一、在 nginx.conf 的 location 中配置静态资源的后缀
例如:当访问静态资源,则从 linux 服务器 /opt/static 目录下获取
location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${root /opt/static;
}
说明:
~
表示正则匹配,也就是说后面的内容可以是正则表达式匹配- 第一个
.
表示任意字符 *
表示一个或者多个字符\.
是转义字符,是后面这个点的转义字符|
表示或者$
表示结尾
整个配置表示以 .js/css/html…为后缀结尾的文件都由nginx处理,返回静态资源的目录为/opt/static,要注意目录权限问题,如果权限不足,就给目录赋予权限;否则会出现403错误 chmod 755
方式二、在 nginx.conf 的 location 中配置静态资源所在目录实现
例如:当访问静态资源,则从 linux 服务器 /opt/static 目录下获取
location ~ .*/(js|css|img|images)${root /opt/static;
}
整个配置表示访问路径 xxx/css、xxx/js、xxx/img、xxx/images 时由nginx处理,返回静态资源的目录为/opt/static。
4、动静分离
静态资源由nginx处理
动态资源由tomcat处理
架构图如下:
中间负责负载均衡的Nginx的配置:
右下角负责静态资源代理的Nginx的配置:
5、虚拟主机
虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站。
Nginx提供虚拟主机这个功能,就是为了让我们不需要安装多个Nginx,就可以运行多个域名不同的网站。
Nginx下,一个server标签就是一个虚拟主机。nginx的虚拟主机就是通过nginx.conf中server节点指定的,想要设置多个虚拟主机,配置多个server节点即可。
例如:www.meituan.com 切换城市,可以看到不同的城市地址不一样(二级域名)
如果一个公司有多个二级域名,没有必要为每个二级域名都提供一台Nginx服务器,就可以使用虚拟主机技术,在一台ngnix服务器上,模拟多个虚拟服务器。
配置虚拟主机方式
方式一、基于端口的虚拟主机(了解)
基于端口的虚拟主机配置,使用端口来区分。由于一般我们不写端口号,这个一般就不用。
server{listen 8080;server_name www.myweb.com;location /myweb{proxy_pass http://www.myweb1.com;}
}
server{listen 8081;server_name www.myweb.com;location /myweb{proxy_pass http://www.myweb2.com;}
}
方式二、基于域名的虚拟主机(掌握)
基于域名的虚拟主机配置,使用域名来区分。常用方式。
server{listen 80;server_name www.myweb1.com;location /myweb{proxy_pass http://www.myweb1.com;}
}
server{listen 80;server_name www.myweb2.com;location /myweb{proxy_pass http://www.myweb2.com;}
}
需要修改本地hosts文件:
192.168.21.1 www.myweb1.com
192.168.21.1 www.myweb2.com
架构图: