最基本的nginx反向代理配置
在VM虚拟机下,搭建一个最简单最基本的Nginx反向代理系统,不包含缓存之类的其他特性功能。服务器信息:准备有4台独立的虚拟机(1台反向代理服务器,3台应用服务器),虚拟机安装以及其他jdk、tomcat的安装省略。虚拟机VM版本:12.5.0操作系统:CentOS 7.0Nginx服务器(反向代理服务器):1...
在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日志,被成功访问了 3 次:
2、应用服务器2的tomcat日志,被成功访问了3 次:
3、应用服务器3的tomcat日志,被成功访问了 4 次:
结束
到此,简单的nginx反向代理系统就完成了。
更多推荐
所有评论(0)