在VM虚拟机下,搭建一个最简单最基本的Nginx反向代理系统,不包含缓存之类的其他特性功能。

服务器信息:

准备有4台独立的虚拟机(1台反向代理服务器,3台应用服务器),虚拟机安装以及其他jdk、tomcat的安装省略。

        

虚拟机VM版本:12.5.0

        操作系统:CentOS 7.0

        Nginx服务器(反向代理服务器):192.168.1.107,安装nginx-1.13.4.tar

        应用服务器1:192.168.1.110,安装jdk8,tomcat9,tomcat端口:8080

应用服务器2:192.168.1.111,安装jdk8,tomcat9,tomcat端口:8080

应用服务器3:192.168.1.112,安装jdk8,tomcat9,tomcat端口:8080

 

注意:要确保Nginx服务器能正常访问到3个应用服务器,虚拟机的IP要设置成同一个网段,然后把防火墙给关闭了。

 

Nginx配置文件nginx.conf

#定义Nginx运行的用户和用户组
user  root;
#nginx进程数,建议设置为等于CPU总核心数
worker_processes  2;

#全局错误日志定义,[ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log info;

#工作模式与连接数上限 
events {
	#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; 
	#epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。  
	use epoll;
	#单个进程最大连接数
	worker_connections  1024;
}

#设定http服务器  
http {
	#文件扩展名与文件类型映射表
	include       mime.types;
	#默认文件类型 
	default_type  application/octet-stream;

	#访问日志格式
	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
					  '$status $body_bytes_sent "$http_referer" '
					  '"$http_user_agent" "$http_x_forwarded_for"';
	#访问日志保存路径
	access_log  /var/log/nginx/access.log  main;

	#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,
	#如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
	#注意:如果图片显示不正常把这个改成off。  
	sendfile        on;

	#长连接超时时间,单位是秒
	keepalive_timeout  65;

	#upstream的负载均衡 
	upstream spring-mvc {
		server 192.168.1.110:8080;
		server 192.168.1.111:8080;
		server 192.168.1.112:8080;
	}

	#虚拟主机的配置
	server {
		#监听端口
		listen       80;
		#服务名称,可以有多个,用空格隔开,如果配置了域名,这里可以写成域名
		server_name  192.168.1.107;

		#对 "/" 启用反向代理,也就是对所有的访问都启用访问代理
		location / {
			#应用默认访问页面
			index index.jsp;
			
			#设置被代理server的协议和地址,这里的spring-mvc其实是上面upstream的配置名称
			proxy_pass http://spring-mvc;
		}
}
#epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。  
	use epoll;
	#单个进程最大连接数
	worker_connections  1024;
}

#设定http服务器  
http {
	#文件扩展名与文件类型映射表
	include       mime.types;
	#默认文件类型 
	default_type  application/octet-stream;

	#访问日志格式
	log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
					  '$status $body_bytes_sent "$http_referer" '
					  '"$http_user_agent" "$http_x_forwarded_for"';
	#访问日志保存路径
	access_log  /var/log/nginx/access.log  main;

	#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,
	#如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
	#注意:如果图片显示不正常把这个改成off。  
	sendfile        on;

	#长连接超时时间,单位是秒
	keepalive_timeout  65;

	#upstream的负载均衡 
	upstream spring-mvc {
		server 192.168.1.110:8080;
		server 192.168.1.111:8080;
		server 192.168.1.112:8080;
	}

	#虚拟主机的配置
	server {
		#监听端口
		listen       80;
		#服务名称,可以有多个,用空格隔开,如果配置了域名,这里可以写成域名
		server_name  192.168.1.107;

		#对 "/" 启用反向代理,也就是对所有的访问都启用访问代理
		location / {
			#应用默认访问页面
			index index.jsp;
			
			#设置被代理server的协议和地址,这里的spring-mvc其实是上面upstream的配置名称
			proxy_pass http://spring-mvc;
		}
}

nginx配置详细说明请看:http://blog.csdn.net/plg17/article/details/77018249

部署应用:

我这里随便写了一个简单的springMVC工程用于反向代理访问的情况。

这个就是要测试访问的页面,controller层读取了5个用户信息列表(spittles)返回到视图文件home.jsp,注意logger日志,一会用于查询反向代理的效果。

 

spitterService.getRecentSpittles(DEFAULT_SPITTLES_PRE_PAGE)的作用就是创建5个用户信息列表返回,简单。

 

把spring-mvc.war包分别上传到3台应用服务器tomcat的webapps目录下。

启动服务并验证

1、先启动应用服务器

进入到应用服务器1的tomcat bin目录下,执行:#./startup.sh,到tomcat log目录下,#tail -f catalina.out,如果没错误日志就说明启动应用成果。

在浏览器中访问:http://192.168.1.110:8080/spring-mvc/home。

说明应用启动成功了,其他两个应用服务器也做同样处理。

 

2、启动Nginx服务

进入到Nginx服务器,我的nginx安装目录为:/usr/local/nginx。

执行:#./sbin/nginx -c /usr/local/nginx/conf/nginx.conf

查看nginx进程:

看到nginx有一个master主进程,还有两个worker进程,worker进程的数量和nginx.conf配置文件的worker_processes  2;配置项的值相等。

 

 

3、通过反向代理访问应用

浏览器中输入:http://192.168.1.107/spring-mvc/home。见证奇迹:

和直接访问应用服务器的效果是一样的。这里解释一下访问地址:http://192.168.1.107/spring-mvc/home。

http://反向代理服务器IP/nginx配置文件nginx.conf的upstream配置项名称/uri

验证负载均衡

 

这里采用了nginx默认的平均轮询负载均衡策略,这么来说,对3台应用服务器的访问时均等的,连续10次访问http://192.168.1.107/spring-mvc/home:

1、应用服务器1的tomcat日志,被成功访问了 次:

 

2、应用服务器2的tomcat日志,被成功访问了3 次:

 

 

3、应用服务器3的tomcat日志,被成功访问了 4 次:

 

 

结束

到此,简单的nginx反向代理系统就完成了。

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐