需求:
客户端发起访问请求,Nginx代理服务器轮询访问后台接口,减少单个tomcat请求压力
iptables设置
# 停止firewall
systemctl stop firewall.service
# 禁止firewall
systemctl disable firewall.service
# 安装iptables
yum install iptables-services -y
# 编辑防火墙文件,一般只开放nginx和mysql端口,
# 自测为了方便,还开放两个tomcat的端口,8080和8090
vim /etc/sysconfig/iptables
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 8080 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 8090 -j ACCEPT
# 启动iptables
systemctl start iptables.service
一台linux设置两个tomcat
- 配置tomcat前需安装好jdk
,这里两个tomcat的地址如下:
/usr/local/tomcat1
/usr/local/tomcat2
- 分别配置两个tomcat的catalina.sh
vim /usr/local/tomcat1/bin/catalina.sh
# tomcat启动会从该文件读取CATALINA_HOME的地址,不同tomcat分别配置自己的地址即可
export CATALINA_HOME=/usr/local/tomcat1
export CATALINA_BASE=/usr/local/tomcat1
export CATALINA_HOME=/usr/local/tomcat2
export CATALINA_BASE=/usr/local/tomcat2
- 配置tomcat2的端口,修改默认的三个端口即可
<Server port="18005" shutdown="SHUTDOWN">
<Connector port="8090" protocol="HTTP/1.1"
<Connector port="18009" protocol="AJP/1.3" redirectPort="8443" />
- 分别启动两个tomcat,可以看到当前控制台打印的CATALINA_BASE路径即自己配置的路径
[root@bigdata1-test webapps]# sh ../bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat1
Using CATALINA_HOME: /usr/local/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat1/temp
Using JRE_HOME: /usr/local/jdk1.8.0_201
Using CLASSPATH: /usr/local/tomcat1/bin/bootstrap.jar:/usr/local/tomcat1/bin/tomcat-juli.jar
Tomcat started.
[root@bigdata1-test webapps]# ../bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat2
Using CATALINA_HOME: /usr/local/tomcat2
Using CATALINA_TMPDIR: /usr/local/tomcat2/temp
Using JRE_HOME: /usr/local/jdk1.8.0_201
Using CLASSPATH: /usr/local/tomcat2/bin/bootstrap.jar:/usr/local/tomcat2/bin/tomcat-juli.jar
Tomcat started.
- 此时分别访问8080和8090端口即可,注意前面iptables要开放8080和8090端口。
Nginx安装与配置
- 安装c++编译环境
yum install gcc-c++ -y
# 查看是否安装
rmp -qa | grep gcc*
- 安装依赖库
# 在线安装
yum install pcre*
yum install openssl*
yum install zlib*
# 离线安装
# 下载各个依赖包,分别执行 ./configue, make, make install
http://www.pcre.org/
http://www.openssl.org/
http://www.zlib.net/
- 安装Nginx
# 下载地址:http://nginx.org/en/download/html
# 解压安装,分别执行
./configure, make, make install
# 安装完成后Nginx默认在:
/usr/local/nginx
# 记得开放Nginx默认端口80
# 启动 Nginx
/usr/local/nginx/sbin/nginx
# 访问 Nginx
http://Nginx服务器ip
- Nginx常用命令
# 启动
nginx/sbin/nginx
# 停止
nginx/sbin/nginx -s stop
# 重启
nginx/sbin/nginx -s reload
# 检验nginx.conf是否合法, 每次修改配置文件后都要检验
nginx/sbin/nginx -t
Nginx配置轮询调用两个tomcat的接口
- 这里模拟前后端分离情况下,通过Nginx代理轮询调用两个tomcat服务
- 后端两台tomcat发布相同的服务,测试接口返回一个hello world字符串
#
# url:localhost:8080/demoService/index
# localhost:8090/demoService/index
# 后端代码
@RequestMapping("/index")
public String index(){
logger.info("调用tomcat服务!");
return "hello world";
}
-
前端代码就一个ajax请求调用index接口,并打印返回结果
一个index.html,一个jquery依赖文件
$.ajax({
type:"GET",//请求类型
url:"demoService/index",//请求的url
dataType:"text",//ajax接口(请求url)返回的数据类型
success:function(data){//data:返回数据(json对象)
alert(data);
}
-
后端代码发布后启动两个tomcat,并能通过url返回结果
前端代码放到Nginx服务器指定地址 /data/front/
- 配置 nginx.conf, 添加以下配置即可
#
upstream my_server
{
# 轮询访问两个端口服务
server 127.0.0.1:8090;
server 127.0.0.1:8080;
}
server {
listen 80;
server_name demo.mynginx.com;
# 前端代码地址
root /data/front/;
# 初始页面
index index.html;
# 请求代理
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
# 反向代理地址,此处要和上面的upstream一致
proxy_pass http://my_server;
}
# 请求代理,对于指定格式的文件进行缓存
location ~ .*\.(gif|jpg|png|html|mp3){
expires 6h;
}
location ~ .*\.(js|css)?$ {
expires 2h;
}
# 日志存放地址
access_log /data/logs/nginx/app_access.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
- 检测,重启 nginx,
sbin/nginx -t
sbin/nginx -s reload
# 日志存放地址要先建好,否则检测会失败
-
客户端配置host
demo.mynginx.com 服务器ip
-
访问服务
http://demo.mynginx.com/index.html
监听tomcat日志可以见到,两台是轮询进行访问
-
更多
在配置upstream时可以有多个配置模式
热备模式:
server 127.0.0.1:8090;
server 127.0.0.1:8080 backup;
# 8090没挂请求一直走8090,挂了走8080
权重:
server 127.0.0.1:8090;
server 127.0.0.1:8080 weight=2;
# 假设3个请求,8080会得到2个
# 上面几个方式不能解决session问题,多个tomcat不共享session,
# 如果请求发到不同tomcat可能会造成重新登录情况
ip地址hash
ip_hash;
server 127.0.0.1:8090;
server 127.0.0.1:8080;
# ip经过hash,同一个ip请求会分到同一个tomcat,不要考虑session
# 最好还是用token代替session
网友评论