浅析nginx作为代理服务器的反向代理、负载均衡和动静分离功能

nginx作为代理服务器

什么是代理服务器?

位于发起请求的客户端与原始服务器端之间的一台跳板服务器。正向代理可以隐藏客户端,反向代理可以隐藏原始服务端。

正向代理

正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

正向代理

反向代理

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

反向代理

正向 or 反向

  • 正向代理其实就是用户主动使用代理,这个代理对用户来说属于正向。

  • 反向代理用户是无感知的,服务器端主动做处理,用户被动接受此代理。对客户来说这个代理就是反向的。

测试案例 - nginx实现反向代理

环境准备

  • 一台Linux操作系统的服务器/虚拟机。
  • 服务器/虚拟机安装了nginx,两台tomcat用于测试。

说明:

本文测试中nginx的安装路径:/app/webserver/nginx/

tomcat安装路径:/app/tomcat8080/ 和 /app/tomcat8081/

配置nginx

vi /app/webserver/nginx/conf/nginx.conf

Nginx配置文件主要分成四部分:main(全局设置)、server(主机设置)、upstream(上游服务器设置,主要为反向代理、负载均衡相关配置)和 location(URL匹配特定位置后的设置),每部分包含若干个指令。main部分设置的指令将影响其它所有部分的设置;server部分的指令主要用于指定虚拟主机域名、IP和端口;upstream的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡;location部分用于匹配网页位置(比如,根目录"/","/images",等等)。他们之间的关系式:server继承main,location继承server;upstream既不会继承指令也不会被继承。它有自己的特殊指令,不需要在其他地方的应用。

关于nginx.conf还有不清楚的可以戳这个地址https://www.runoob.com/w3cnote/nginx-install-and-config.html

在nginx.conf文件的http块中添加如下:

include /etc/nginx/conf/*.conf;

以上代码意思是将该路径(/etc/nginx/conf)中所有以.conf结尾的文件内容映射到nginx.conf的http块中,以此做到将配置拆分,方便管理。

编辑配置文件test.conf

vi /etc/nginx/conf/test.conf
server {
	# 监听端口
	listen  80;
	# 监听地址
	server_name  192.168.0.187;
	# 请求匹配
	localtion /8080 {
		proxy_pass  http://localhost:8080;
	}
	localtion /8081 {
		proxy_pass  http://localhost:8081;
	}
}

启动tomcat

接着启动两个tomcat服务器,用来模拟两个原始服务器。

为了方便演示可以在两个tomcat服务器的webapps目录下新建/8080/a.html和/8081/a.html。

启动前记得把两个tomcat的端口在tomcat目录下bin/server.xml修改一下,避免端口占用。

./app/tomcat8080/bin/startup.sh
./app/tomcat8081/bin/startup.sh

开放端口

以上,配置完nginx和tomcat,还差最后一步。开放nginx监听的80端口。

这里只需要未nginx开放80端口,并不需要开放8080和8081。因为nginx和tomcat部署在同一台机器,经过nginx代理服务器转发的请求,可以直接访问原始服务器。不管是否部署到同一台机器,反向代理服务器都帮助我们隐藏了原始服务器的信息。

查看所有开放端口

firewall-cmd --list-all

开放80端口

firewall-cmd --add-port=80/tcp --permanent

重启防火墙

firewall-cmd --reload

测试效果

访问服务器/虚拟机ip+/8080/a.html,不带端口默认访问80端口。
8080
8081

可以看到,客户端发送请求,被nginx监听到,在根据请求路径转发到相应的原始服务器。

负载均衡

负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。

负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。

nginx的提供负载均衡策略分为内置策略和拓展策略,内置策略有轮询,加权轮询和ip hash。拓展策略就很多了,在这里就不再一一赘述。关于内置策略下面给大家边测边说。

测试案例 - nginx实现负载均衡

配置nginx

编辑配置文件test.conf

vi /etc/nginx/conf/test.conf
upstream test {
	server localhost:8080;
	server localhost:8081;
}
server {
	# 监听端口
	listen  80;
	# 监听地址
	server_name  192.168.0.187;
	# 请求匹配
	localtion /lb {
		proxy_pass http://test;
	}
}

轮询

轮询是nginx负载均衡的默认方式。顾名思义,所有的请求都会按照时间顺序分配到不同的服务上。上面的配置就可以做到轮询的负载均衡。

负载均衡
负载均衡

热备

如果你有两台服务器,当一台发生事故时,才会启用另一台备用服务器。配置的话,只需要在upstream中的指定一台作为备份服务器就可以了。

upstream test {
	server localhost:8080;
	server localhost:8081 backup;
}

加权轮询

如果不为服务加权,大家的权值默认都是1。可以通过设置权值来分配更多的请求到某个服务器。

upstream test {
	server localhost:8080 weight=1;
	server localhost:8081 weight=3;
}

ip hash

每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,可以解决session不共享问题。

upstream test {
	ip_hash;
	server localhost:8080;
	server localhost:8081;
}

动静分离

动静分离是指在web服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。

动静分离可以减缓后端服务器的压力,让其专注与处理后端的动态数据请求。对于静态数据的请求交给静态资源服务器或者CDN。

测试案例 - nginx实现动静分离

配置nginx

编辑配置文件test.conf

vi /etc/nginx/conf/test.conf
server {
	# 监听端口
	listen  80;
	# 监听地址
	server_name  192.168.0.187;
	# 请求匹配
    location /static/ {
    	root /app/webserver/nginx/html;
    	# 开启目录浏览
        autoindex  on;
    }
}

接着,加入静态资源到 /app/webserver/nginx/html/static/ 下。

测试效果

动静分离

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值