Nginx实现虚拟主机、反向代理、负载均衡、高可用、web缓存
更多精彩:
主题
虚拟主机配置
反向代理配置
负载均衡配置
负载均衡高可用
nginx实现web缓存
一 虚拟主机
概念:
虚拟主机是一种特殊的模拟硬件的软件技术,它可以将网络上的一台物理计算机映射成多个虚拟主机,每个虚拟主机可以独立对外提供www服务,这样就可以实现一台物理主机对外提供多个web服务了。并且每个虚拟主机之间是独立的,互不影响的。
概念视图:
nginx支持三种类型的虚拟主机配置:
- 1、基于ip的虚拟主机
- 2、基于域名的虚拟主机
- 3、基于端口的虚拟主机
这里我们主要讲一下基于域名的虚拟主机配置,也是使用最多的。
基于域名的虚拟主机配置
需求
两个域名都指向一台机器, 使用不同的域名访问会得到不同的内容。
分析
- 使用一台虚拟机作为物理机。
- 使用两个域名:www.szlocal1.com、www.szlocal2.com
- 分别为两个域名创建访问资源目录: usr/local/szlocal1/index.html、usr/local/szlocal2/index.html
usr/local/szlocal1/index.html、usr/local/szlocal2/index.html内容如下:
<h3>
szlocal1
</h3>
<h3>
szlocal2
</h3>
实战
虚拟主机配置
在/usr/local/nginx/conf/nginx.conf
文件,添加两个虚拟主机,即添加两个server配置项:
# 添加szlocal1
server {
listen 80;
server_name www.szlocal1.com;
location / {
root /usr/local/szlocal1;
index index.html index.htm;
}
}
# 添加szlocal2
server {
listen 80;
server_name www.szlocal2.com;
location / {
root /usr/local/szlocal2;
index index.html index.htm;
}
}
在宿主机中访问
这样我们的基于域名的虚拟主机就配置好了,但是在浏览中会访问不到,因为DNS服务器中并没有我们刚配置的的两个域名,我们要模拟的话,可以配置我们宿主机的hosts文件,windows系统hosts所在的路径是:
C:\Windows\System32\drivers\etc
在hosts文件中添加以下内容:
192.168.75.135 www.szlocal1.com
192.168.75.135 www.szlocal2.com
在浏览器中访问www.szlocal1.com、www.szlocal2.com,即可分别看到页面输出: szlocal1、szlocal2
二 反向代理
概念:
反向代理(Reverse Proxy):指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。反向代理,客户端并不知道目标资源在哪里,主动权也不在客户端。
反向代理特点: 保护和隐藏原始资源服务器。
正向代理:和反向代理不同之处在于,典型的正向代理是一种用户知道目标地址并主动使用的代理方式。例如Chrome浏览器中安装了switchysharp以后,通过switchysharp方便地进行代理转发服务。而为此用户必须要提前在switchysharp中做好设置才能达到相应的效果。
需求
在一台虚拟机中使用nginx配置反向代理,代理到tomcat服务。
分析
一台虚拟机:192.168.75.135
安装了nginx、tomcat
需要使用虚拟主机的配置,这里增加一个配置为 www.szlocal3.com
实战
在/usr/local/nginx/conf/nginx.conf
文件,添加一个server配置项,并且增加==proxy_pass(反向代理)==的配置。
# 添加szlocal3 虚拟主机
server {
listen 80;
server_name www.szlocal3.com;
location / {
proxy_pass http://localhost:8080;
}
}
在宿主机windows的hosts配置:
192.168.75.135 www.szlocal3.com
然后浏览器访问: www.szlocal3.com 即可。
说明: 访问www.szlocal3.com时,是监听了80端口,然后反向代理到了该机器的8080端口。用户并不知道资源在8080的tomcat服务中。
三 负载均衡
概念:
负载均衡(Load Balance,LB):意思是当一台机器支撑不住访问流量的时候,可以通过水平扩展、增加廉价的机器设备来分担访问请求。
举个栗子:假设你开发了一个web应用,使用的是单机的tomcat,并发请求仅仅能支撑400,做活动期间达到了900的请求,这时候,一台机器搞不定,就需要再扩展2台,可以支撑1200的请求,最开始的1台+后面的2台就可以分摊请求,达到负载均衡的目的。
所以说,负载均衡可以增加系统的吞吐。
Nginx就是一个负载均衡服务器:
数据转发功能,为nginx提供了跨越单机的横向处理能力,使nginx摆脱只能为终端节点提供单一功能的限制,而使它具备了网路应用级别的拆分、封装和整合的战略功能。在云模型大行其道的今天,数据转发是nginx有能力构建一个网络应用的关键组件。
Nginx中upstream模块就拥有数据转发功能,实现负载均衡。upstream不产生自己的内容,而是通过请求后端服务器得到内容,所以才称为upstream(上游)。upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
Nginx负载均衡配置步骤:
- 在http节点添加upstream节点,如:
upstream myapp{
server 192.168.75.130:8080;
server 192.168.75.134:8080;
}
- 在server节点下的location节点中添加 proxy_pass 配置项, 格式: proxy_pass http://upstream后面的名字
# 添加szlocal4 虚拟主机
server {
listen 80;
# 虚拟主机
server_name www.szlocal4.com;
location / {
root html;
index index.html index.htm;
# 反向代理到upstream
proxy_pass http://myapp;
}
}
需求
实现一个简单的负载均衡,访问www.szlocal4.com,会在两台机器之间来回切换。
分析
- 需要设置基于域名的虚拟主机www.szlocal4.com
- 负载均衡使用 upstream
- 结合反向代理 proxy_pass
实战
- 在192.168.75.130、192.168.75.134 两台虚拟机中开启tomcat服务, tomcat版本号不一致,便于后面访问时观察页面变化。
- 在Nginx负载均衡服务器中配置:
# 在http节点中配置
upstream myapp{
server 192.168.75.130:8080;
server 192.168.75.134:8080;
}
- 配置一个server节点,配置了虚拟主机www.szlocal4.com ; 并且反向代理结合upstream的名字myapp。
# 添加szlocal4 虚拟主机
server {
listen 80;
# 虚拟主机
server_name www.szlocal4.com;
location / {
root html;
index index.html index.htm;
# 反向代理到upstream
proxy_pass http://myapp;
}
}
- 设置宿主机,修改windows的hosts,添加:
192.168.75.135 www.szlocal4.com
- 重启192.168.75.135的nginx
- 浏览器访问; 会看到在两个tomcat服务之间来回切换,见下图:(这里为了以示区分,在2台机器上的tomcat版本不一致)。