Nginx-2反向代理、负载均衡和动静分离

目录

一、反向代理

1、简单反向代理

Tomcat

Nginx

2、匹配路径反向代理

Tomcat

Nginx

二、负载均衡

1、负载均衡的作用

2、Nginx的配置

(1)轮询

(2)权重

(3)IP哈希算法

(4)least_conn最少连接

(5)fair(第三方)

3、负载均衡备份与宕机

(1)备份backup配置

(2)宕机down配置

三、动静分离

动静分离的实现


一、反向代理

实验环境使用windows,侧重原理,其他配置跟linux没有区别

(1)Tomcat Windows版(可以去apache官网下,解压即可)

(2)Nginx windows版(解压即可)

1、简单反向代理

Tomcat

修改conf目录下sever.xml下tomcat的启动端口为8181

在windows下启动tomcat,在bin目录下双击startup.bat即可

如果启动日志乱码,修改conf目录下logging.properties配置文件,添加如下配置

java.util.logging.ConsoleHandler.encoding = GBK

Nginx

修改conf目录下配置文件nginx.conf文件如下

server {
        # 监听端口
        listen       8080;
        server_name  localhost;

        location / {
	    # 代理服务器
	    proxy_pass http://127.0.0.1:8181;
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

启动nginx,访问127.0.0.1:8080效果如下

2、匹配路径反向代理

Tomcat

准备两台tomcat,一台是8181端口,另一台是8282端口

分别在两台服务器webapps目录下创建不同的文件夹edu和app,并创建不同的页面,效果如下:

注意:在一个系统里同时启动多个Tomcat,需要修改Tomcat的多个相关端口

Nginx

修改conf目录下配置文件nginx.conf文件如下

server {
        listen       8080;
        server_name  localhost;
    # edu路径
	location ~ /edu/ { 
	    proxy_pass http://127.0.0.1:8181; 
	    index index.html index.htm; 
	}
	# app路径
	location ~ /app/ { 
	    proxy_pass http://127.0.0.1:8282; 
	    index index.html index.htm; 
	}

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

启动nginx,通过访问127.0.0.1:8080下不同的路径效果如下

Nginx通过路径匹配代理到不同的服务器

Nginx通过路径匹配的相关模式

二、负载均衡

1、负载均衡的作用

转发

转发是负载均衡的核心功能,它能够根据一定的算法,将客户端请求转发到不同应用服务器,缓解每台服务器的压力,提高并发量。

移除故障

当其中一台服务器发生故障时,会被移出轮询队列,客户端请求将会发送到其他几台正常的服务器,不会影响客户端的访问。

恢复添加

当故障的服务器恢复时,会自动被加到轮询队列,继续处理客户端请求。

2、Nginx的配置

(1)轮询

如下是Nginx的基本配置, upstream 配置要负载的节点。nodes名字可以自己取,要跟 server proxy_pass nodes 一致。

server_name 可以是Nginx服务器的ip地址,也可以是域名,根据具体情况配置即可, listen 为端口号。

    #负载均衡节点
	upstream nodes { 
		server 127.0.0.1:8181; 
		server 127.0.0.1:8282; 
	}

    server {
        listen       8080;
        server_name  localhost;

	    location / { 
	        proxy_pass http://nodes; 
	        index index.html index.htm; 
	    }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

使用以上配置,默认采用轮询的分发策略,即每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询

测试

准备两台tomcat,一台是8181端口,另一台是8282端口

分别在两台服务器webapps目录ROOT文件夹下创建不同的index.html页面(先清空ROOT文件夹下所有文件),用来区分服务

启动Nginx,多次点击访问127.0.0.1:8080端口,可以看到在不同页面的轮询效果

(2)权重

如果需要为每个请求节点配置不同的权重,可以在地址后面增加权重,配置如下

upstream nodes { 
    server 127.0.0.1:8181 weight=4; 
    server 127.0.0.1:8282;
}

通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。

weight默认为1weight越大,负载的权重就越大。

(3)IP哈希算法

还有一种策略是IP哈希算法,请求按访问iphash结果分配,这样每个IP固定访问一个应用服务器,可以解决session共享的问题,配置如下

upstream nodes { 
    ip_hash; 
    server 192.168.1.11; 
    server 192.168.1.12; 
}

(4)least_conn最少连接

least_conn策略是将web请求分发到连接数最少的服务器上,参考配置如下:

upstream myserver{ 
    least_conn;
    server 192.167.40.3:8080; 
    server 192.167.40.4:8081; 
}

(5)fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

fair不是Nginx内置的算法,需要安装第三方的插件才能生效!一般在Ningx中安装!

upstream server_pool{ 
    server 192.168.5.21:80;
    server 192.168.5.22:80;
    fair; 
}

3、负载均衡备份与宕机

(1)备份backup配置

当其他非backup机器挂掉后,才会请求backup机器,参考配置如下:

upstream myserver{ 
    server 192.167.40.3:8080; 
    server 192.167.40.4:8081 backup;
}

(2)宕机down配置

配置down的服务器不参与负载均衡,这样down所标记的服务器就可以安心的升级了,参考配置如下:

upstream myserver{ 
    server 192.167.40.3:8080; 
    server 192.167.40.4:8081 down; 
}

注:这两个配置很多时候用于运维,维护某个机器的时候

三、动静分离

在项目的部署中 我们将静态资源放到Nginx服务器上、动态资源放到Tomcat服务器上这种就称为动静分离

静态资源和动态资源完全的隔离开、有效的减轻了Tomcat服务器的压力

动静分离的实现

注:本实验使用windows环境实现

准备java工程

准备一个java工程,具备简单的页面访问样式,并在本地启动

访问效果

Nginx配置

在nginx.conf中配置静态资源映射

worker_processes  1;

events {
    worker_connections  1024;
}

http {
		include       mime.types;
		default_type  application/octet-stream;

		upstream nodes { 
			# 代理节点
			server 127.0.0.1:8888; 
		}

		server {
			listen       8080;
			server_name  localhost;

		location / { 
			proxy_pass http://nodes; 
			index index.html index.htm; 
		}
		
		#映射的是非css和js的文件 .表示匹配任意字符 *表示匹配0次或多次 \.对点进行转义
		location ~.*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { 
			root D:/html; 
			# 缓存30天
			expires 30d; 
		}
		
		#映射的是css和js的文件 
		location ~.*\.(js|css)?$ { 
			root D:/static; 
			#缓存1小时 
			expires 1h; 
		}

		error_page   500 502 503 504  /50x.html;
		location = /50x.html {
			root   html;
		}
    }
}

在映射的路径中配置资源,图片样式映射在html文件夹,css样式映射在static文件夹

注:有时候配置nginx配置文件可能会配置错误,可以访问logs文件夹下的相关日志,查找错误原因

现在,我们启动nginx,访问nginx的127.0.0.1:8080/index,效果如下:

访问nginx上的静态图片资源,127.0.0.1:8080/car.jpg,效果如下:

注:如果在linux上配置,出现403错误,可能需要给文件夹赋权限(755权限)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

swadian2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值