欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

最基本的nginx反向代理配置

程序员文章站 2022-05-26 23:53:27
...

        在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;
		}
}
nginx配置详细说明请看:http://blog.csdn.net/plg17/article/details/77018249

部署应用:

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

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

最基本的nginx反向代理配置


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

最基本的nginx反向代理配置

把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。

最基本的nginx反向代理配置

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


2、启动Nginx服务

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

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

查看nginx进程:

最基本的nginx反向代理配置

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


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

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

最基本的nginx反向代理配置

和直接访问应用服务器的效果是一样的。这里解释一下访问地址: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日志,被成功访问了 次:

最基本的nginx反向代理配置


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

最基本的nginx反向代理配置


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

最基本的nginx反向代理配置


结束

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