Nginx的安装与介绍
Nginx简介
Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名,其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
Nginx作用
- Nginx是一款轻量级的web 服务器,可以处理静态资源(前后端分离)
- Nginx是反向代理服务器,实现负载均衡
- Nginx也是电子邮件(IMAP/POP3)代理服务器,能够代理收发电子邮件
Nginx和Tomcat的区别
-
设计目的:
- Tomcat是一个免费的开源的Servlet容器,实现了JAVAEE规范,遵循http协议的的服务器
- 部署web项目,运行Servlet、JSP代码的
- 也能部署静态资源
- 为了解析处理Servlet而设计的
- Nginx是一款轻量级的电子邮件(电子邮件遵循IMAP/POP3协议)代理服务器,后来又发展成可以部署静态应用程序和进行反向代理的服务器
- 为了部署静态资源的。更重要的目的是:反向代理
- Tomcat是一个免费的开源的Servlet容器,实现了JAVAEE规范,遵循http协议的的服务器
-
存放内容:
-
tomcat可以存放静态和动态资源
-
nginx可以存放静态资源
-
-
应用场景
-
tomcat用来开发和测试javaweb应用程序
-
nginx用来做负载均衡服务器, 发布静态网页
-
Nginx安装与使用
下载Nginx
注意:开发人员/企业,不应该追求最新,应该追求稳定。各种软件和技术,都要求稳定
- Nginx的下载地址:http://nginx.org/en/download.html
安装Nginx
- Nginx的Windows版免安装,解压可直接使用。
- 注意:解压目录里不要有中文、空格、特殊字符
- 解压后目录结构如下:
nginx-1.16.1
|--conf 配置文件,其中有一个nginx.conf是核心配置文件
|--contrib nginx提供的一些脚本工具等
|--docs 文档说明
|--html nginx的默认部署的静态资源,其中有欢迎页面和错误页面
|--logs 日志
|--temp 临时文件夹
|--nginx.exe nginx程序 ★
Nginx的基本操作
操作命令
- 打开cmd,切换到nginx的解压目录
- 输入命令,操作nginx:
- 启动Nginx:
start nginx.exe
- 重新载入配置文件:
nginx.exe -s reload
- 如果修改了配置文件,不需要重启,只要重新载入即可
- 停止Nginx:
nginx.exe -s stop
- 启动Nginx:
演示效果
- 启动nginx
- 启动成功后,在任务管理器中会有两个nginx的进程
-
使用浏览器访问nginx
- nginx的默认端口是80,所以访问地址是:
http://localhost:80
- nginx的默认端口是80,所以访问地址是:
-
如果修改了配置文件,就重新载入
- 停止nginx
小结
- 安装与配置
- 免安装,直接解压即可。注意:解压的目录里不要有中文、空格、特殊字符
- 需要关注的有两个:
- nginx.exe:nginx软件的程序
- conf/nginx.conf:配置文件
- nginx的基本操作
- 通过cmd命令操作:打开cmd,切换到nginx文件夹里:
cd /d nginx的文件夹路径
- 启动nginx:
start nginx.exe
- 重启nginx:
nginx.exe -s reload
- 关闭nginx:
nginx.exe -s stop
- 通过cmd命令操作:打开cmd,切换到nginx文件夹里:
Nginx的使用
- 使用Nginx部署静态web应用
- 准备一个静态web应用
- 修改nginx的配置文件
- 启动nginx,使用浏览器访问
准备一个静态web应用
- 有静态项目如下:(任意静态项目均可),放到没有中文、空格、特殊字符的目录里
修改nginx的配置文件
- 打开
conf\nginx.conf
配置文件,修改http
中server
的内容- 配置文件中
#
开头的是注释
- 配置文件中
......
http {
......
server {
listen 80;
server_name localhost;
#======配置开始======
location / {
root E:\\travel; # 配置静态项目的路径,注意:要双反斜杠转义
index index.html; # 设置默认的欢迎页面
}
#======配置结束======
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
启动nginx,使用浏览器访问
- 打开cmd,切换到nginx目录里,启动nginx:
start nginx.exe
- 使用浏览器访问:
http://localhost:80
小结
- 准备一个静态项目(不要放在有中文、空格、特殊字符的目录里)
- 修改nginx的配置文件
nginx.conf
server {
listen 80;
server_name localhost;
location / {
# root:要配置静态项目的路径,注意反斜杠,以英文的分号结尾
root E:\\99\\travel;
# index:配置默认的欢迎页面,以英文分号结尾
index index.html;
}
......
Nginx虚拟主机
- Nginx可以配置多个虚拟主机,每个虚拟主机里部署不同的web项目
- 我们可以
- 方案一:给每个虚拟主机设置不同的端口,浏览器通过不同端口访问不同的web项目
- 方案二:给每个虚拟主机设置不同的域名,浏览器通过不同域名访问不同的web项目
Nginx虚拟主机-配置端口
使用nginx部署多个web应用,通过不同端口访问不同web应用
- 这里我们将演示方案一:虚拟主机监听端口
- 通过
8888
和9999
两个端口,分别访问两个web项目
- 通过
准备两个web应用
- 在E盘里准备了两个web应用
- 第1个web应用:login
- 第2个web应用:regist
修改nginx配置文件
- 找到Nginx的
conf/nginx.conf
,打开并修改文件:- 其中每个
server
是一个虚拟主机,server
中的listen
是要监听的端口 - 我们拷贝,得到两个server
- 第1个:监听端口8888,配置login项目
- 第2个:监听端口9999,配置regist项目
- 其中每个
# 第一个虚拟主机配置
server {
listen 8888;
server_name localhost;
location / {
root E:\\login;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 第二个虚拟主机配置
server {
listen 9999;
server_name localhost;
location / {
root E:\\regist;
index index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
启动nginx,使用浏览器访问
-
使用端口8888,访问travel:
http://localhost:8888
-
使用端口9999,访问regist:
http://localhost:9999
小结
- 准备两个静态项目
- 修改nginx.conf
- 把
server{}
复制,每个server就是一个虚拟主机。给两个虚拟主机分别设置不同的端口、项目路径
- 把
Nginx虚拟主机-配置域名
配置虚拟主机,能够使用指定域名访问web应用
- 这里我们将演示方案二:虚拟主机监听域名
- 通过
www.test1.com
和www.test2.com
两个域名,分别访问两个web项目
- 通过
修改hosts文件,设置域名映射
www.travel.com
和regist.travel.com
两个域名是我们自定义的,如果想让浏览器通过两个域名能访问到nginx部署的web项目,必须要设置两个域名对应的ip。- 因为实际上计算机只能识别ip地址,是不能识别域名的。当我们向一个域名发请求时,必须要把域名转换成对应的ip地址,实际是还是通过ip地址向服务器发请求。
1 域名和ip映射介绍
- 当我们上网时,在浏览器里输入的地址通常是域名,例如:
http://www.jd.com
。 - 当我们浏览器向
http://www.jd.com
域名发请求时,域名解析的流程如下:- Windows会自动把本地的DNS配置,加载到本地DNS缓存中(第①步)
- 本地的DNS配置文件是:
C:\Windows\System32\drivers\etc\hosts
- 本地的DNS配置文件是:
- 先查找本地的DNS缓存(第②步);如果本地缓存了域名对应的ip,则获取ip,直接向ip发请求(第④步)
- 如果本地没有找到,则请求到DNS服务器(第③步),得到对应的ip,然后发ip发请求(第④步)
- Windows会自动把本地的DNS配置,加载到本地DNS缓存中(第①步)
2 修改hosts文件
-
把
www.login.com
和regist.regist.com
域名,和127.0.0.1
域名进行绑定,这样的话:- 浏览器上输入域名:
www.login.com
,实际访问的是绑定的ip127.0.0.1
- 浏览器上输入域名:
www.regist.com
,实际访问的是绑定的ip127.0.0.1
- 浏览器上输入域名:
-
修改方式:打开
C:\Windows\System32\drivers\etc\hosts
文件,在文件最后增加:127.0.0.1 www.login.com 127.0.0.1 www.regist.com
准备两个web应用
- 在E盘里准备了两个web应用
- 第1个web应用:login
- 第2个web应用:regist
修改nginx配置文件
找到Nginx的conf/nginx.conf
,打开并修改文件:
- 其中每个
server
是一个虚拟主机,server
中的listen
是要监听的端口 - 我们拷贝,得到两个server
- 第1个:监听域名
www.login.com
,端口使用默认的80,配置login项目 - 第2个:监听域名
www.regist.com
,端口使用默认的80,配置regist项目
- 第1个:监听域名
# 第1个虚拟主机:监听域名www.login.com,端口使用默认的80,配置login项目
server {
listen 80;
server_name www.login.com;
location / {
root E:\\login;
index index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 第2个虚拟主机:监听域名www.regist.com,端口使用默认的80,配置regist项目
server {
listen 80;
server_name www.regist.com;
location / {
root E:\\regist;
index index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
启动nginx并访问
- 输入
http://www.login.com
,访问login项目 - 输入
http://www.regist.com
,访问regist项目
Nginx反向代理
- 代理分为
- 正向代理
- 反向代理
正向代理
- 正向代理,简称代理,是客户端的代理。
- 设置代理的方式:
- 在浏览器里,打开Internet选项
反向代理
- 反向代理,是服务端的代理,与客户端没有关系。
- 在服务器集群环境中,用户只需要访问代理服务器即可。客户端不需要关注也不知道每个服务器的地址
- 在反向代理服务器中,可以设置防火墙、安全策略、过滤规则等安全设置,可以提高服务端的安全性
- 反向代理服务器可以实现服务端的负载均衡
Nginx实现反向代理
- 使用Nginx实现服务器的反向代理配置
- 准备一个服务器实例,这里使用Tomcat
- 修改配置nginx,使用Nginx作为服务端的代理(反向代理服务器)
- 启动Nginx,浏览器通过Nginx访问目标服务器
准备一个服务器实例
- 把web应用
mm.war
拷贝到Tomcat的webapps
里
- 双击Tomcat的
bin\startup.bat
,启动Tomcat
修改配置nginx,使用Nginx作为反向代理
-
打开Nginx的
conf\nginx.conf
,修改配置信息- 在
http
里增加upstream
- 修改
server
的配置
upstream tomcat_servers{ # tomcat_servers 是自己命名的,可以叫其它名称 server 127.0.0.1:8080; # 格式: server 服务器的域名或ip:端口; } server { listen 80; server_name localhost; location / { # root E:\\travel; proxy_pass http://tomcat_servers; #格式:proxy_pass http://upstream名称; index index.html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
- 在
启动Nginx,浏览器通过Nginx访问目标服务器
- 浏览器输入地址:
http://localhost:80/mm
,是Nginx的访问地址- 请求过程:浏览器发请求到Nginx
- Nginx把请求分发到Tomcat上,由Tomcat处理
- 响应过程:Tomcat把响应返回给Nginx
- Nginx把响应返回给浏览器
- 请求过程:浏览器发请求到Nginx
Nginx负载均衡
- 了解负载均衡的概念
- 使用Nginx实现负载均衡
负载均衡介绍
负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。
Nginx实现负载均衡的步骤
- 在服务器集群环境中,要有多个服务器实例共同提供服务。这些服务器由Nginx实现负载均衡
- Nginx实现负载均衡的步骤:
- 准备多个服务器实例,这里使用Tomcat
- 服务器1地址:
localhost:8081
- 服务器2地址:
localhost:8082
- 服务器3地址:
localhost:8083
- 服务器1地址:
- 修改配置nginx,实现负载均衡
- 主要是配置文件中
upstream
的配置
- 主要是配置文件中
- 启动Nginx,浏览器通过Nginx访问目标服务器
- 准备多个服务器实例,这里使用Tomcat
Nginx实现负载均衡
1 准备多个服务器实例
- 这里我们使用Tomcat,部署启动三个服务。为了避免端口冲突,需要设置三个Tomcat使用不同的端口
- 要修改每个tomcat里
conf/server.xml
,其中每个tomcat的三个端口都要修改
-
三个Tomcat都部署了
travel.war
- 为了能让客户端可以区分访问的是哪个服务器,我们对三个Tomcat部署的
ROOT
代码做了以下修改- 8081的首页
index.jsp
,设置网页标签为tomcat1
- 8082的首页
index.jsp
,设置网页标签为tomcat2
- 8083的首页
index.jsp
,设置网页标签为tomcat3
- 8081的首页
- 为了能让客户端可以区分访问的是哪个服务器,我们对三个Tomcat部署的
-
分别启动三个Tomcat
2 修改配置nginx,实现负载均衡
-
打开Nginx的
conf\nginx.conf
,修改配置信息- 在
upstream
里设置多个服务器的地址,并增加weight
设置每个服务器被访问的权重weight
:服务器的权重,可以理解为服务器被访问到的机率
- 修改
server
的配置
# 三个服务器8081:8082:8083 被访问到的机率是 10:5:2 upstream tomcat_servers{ server 127.0.0.1:8081 weight=10; server 127.0.0.1:8082 weight=5; server 127.0.0.1:8083 weight=2; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://tomcat_servers; proxy_set_header Host $host; index index.html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
- 在
nginx配置proxy_set_header Host $host的作用?
nginx中proxy_set_header Host
h
o
s
t
的作用及
host的作用及
host的作用及proxy_host,
h
o
s
t
与
host与
host与http_host的区别
3 启动Nginx,浏览器通过Nginx访问目标服务器
http://localhost:80