Nginx实现虚拟主机、反向代理、负载均衡、高可用、web缓存

更多精彩:

主题

虚拟主机配置

反向代理配置

负载均衡配置

负载均衡高可用

nginx实现web缓存

一 虚拟主机

概念:

虚拟主机是一种特殊的模拟硬件的软件技术,它可以将网络上的一台物理计算机映射成多个虚拟主机,每个虚拟主机可以独立对外提供www服务,这样就可以实现一台物理主机对外提供多个web服务了。并且每个虚拟主机之间是独立的,互不影响的。

概念视图:

nginx 配置浏览器缓存_负载均衡

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上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。反向代理,客户端并不知道目标资源在哪里,主动权也不在客户端

反向代理特点: 保护和隐藏原始资源服务器。

nginx 配置浏览器缓存_虚拟主机_02

正向代理:和反向代理不同之处在于,典型的正向代理是一种用户知道目标地址并主动使用的代理方式。例如Chrome浏览器中安装了switchysharp以后,通过switchysharp方便地进行代理转发服务。而为此用户必须要提前在switchysharp中做好设置才能达到相应的效果。

nginx 配置浏览器缓存_负载均衡_03

需求

在一台虚拟机中使用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 配置浏览器缓存_负载均衡_04

数据转发功能,为nginx提供了跨越单机的横向处理能力,使nginx摆脱只能为终端节点提供单一功能的限制,而使它具备了网路应用级别的拆分、封装和整合的战略功能。在云模型大行其道的今天,数据转发是nginx有能力构建一个网络应用的关键组件。

Nginx中upstream模块就拥有数据转发功能,实现负载均衡。upstream不产生自己的内容,而是通过请求后端服务器得到内容,所以才称为upstream(上游)。upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。


Nginx负载均衡配置步骤:

  1. 在http节点添加upstream节点,如:
upstream myapp{
	server 192.168.75.130:8080;
    server 192.168.75.134:8080;
}
  1. 在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

实战

  1. 在192.168.75.130、192.168.75.134 两台虚拟机中开启tomcat服务, tomcat版本号不一致,便于后面访问时观察页面变化。
  2. 在Nginx负载均衡服务器中配置:
# 在http节点中配置
upstream myapp{
	server 192.168.75.130:8080;
    server 192.168.75.134:8080;
}
  1. 配置一个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;
        }
    }
  1. 设置宿主机,修改windows的hosts,添加:
192.168.75.135 www.szlocal4.com
  1. 重启192.168.75.135的nginx
  2. 浏览器访问; 会看到在两个tomcat服务之间来回切换,见下图:(这里为了以示区分,在2台机器上的tomcat版本不一致)。

nginx 配置浏览器缓存_nginx 配置浏览器缓存_05

nginx 配置浏览器缓存_负载均衡_06