Centos7+nginx+tomcat7反向代理,负载,集群

来源:互联网 发布:淘宝买家金钻好处 编辑:程序博客网 时间:2024/04/30 13:54

jdk7和tomcat7安装配置参考:
http://blog.csdn.net/qq1940879801/article/details/77676563
nginx1.10.1安装配置参考:
http://blog.csdn.net/qq1940879801/article/details/77684665

1.新建separate文件夹,在separate新建imgs文件夹,在imgs放入一张图片名为girl.jpg,在separate新建index.jsp,编辑内容

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><HTML><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Nginx动静分离测试</title></head>    <body>        <h1>您正在访问:192.168.3.128:8080</h1>        <img src="/drp/img/girl.jpg"  alt="女孩" />    </body></html>

1.nginx+单个tomcat
1.1 通过Xftp将文件放到linux的/usr/local/tomcat7/webapps
启动tomcat

访问地址
http://192.168.3.128:8080/separate/
这里写图片描述

1.2 将tomcat和nginx关联起来, 其实就是访问nginx,然后nginx再转发给tomcat.
这就要修改下nginx的配置文件.(注意不是nginx安装目录下的配置文件)
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
在server模块下的location模块添加内容
proxy_pass http://192.168.3.128:8080;
这里写图片描述
访问地址
http://192.168.3.128/separate/
注意,不用加8080端口,此时图片访问不了,解决方法在第三步

2 nginx+2个tomcat集群
1) 首先把tomcat停掉,然后复制一份出来,目录分别是tomcat7,tomcat72
[root@localhost ~]# ps -ef | grep tomcat
root 2882 1 0 10:44 ? 00:03:12 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/usr/local/tomcat7/endorsed -classpath /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat7 -Dcatalina.home=/usr/local/tomcat7 -Djava.io.tmpdir=/usr/local/tomcat7/temp org.apache.catalina.startup.Bootstrap start start
root 8495 7233 0 16:31 pts/0 00:00:00 grep –color=auto tomcat
[root@localhost ~]# kill -9 2882
[root@localhost ~]# cp -r /usr/local/tomcat7 /usr/local/tomcat72
2)修改tomcat72占用的端口
[root@localhost ~]# vim /usr/local/tomcat72/conf/server.xml
将8080改为8180,8005改为8105,8009改为8109
保存退出
先按esc,然后按:键盘,在这个输入wq,然后按回车即可保存退出
3) 将tomcat72下面的 index.jsp内容192.168.3.128:8080改为192.168.3.128:8180
[root@localhost ~]# vim /usr/local/tomcat72/webapps/separate/index.jsp
修改192.168.3.128:8080改为192.168.3.128:8180
保存退出
先按esc,然后按:键盘,在这个输入wq,然后按回车即可保存退出
4) 修改ngnix的配置文件,用来做指向2个tomcat
[root@localhost conf]# vim /usr/local/nginx/conf/nginx.conf
在server模块添加内容
upstream local_tomcat {
server 192.168.3.128:8080;
server 192.168.3.128:8180;
}
在server模块下的location模块修改或添加内容
proxy_pass http://local_tomcat ;
保存退出
先按esc,然后按:键盘,在这个输入wq,然后按回车即可保存退出
这里写图片描述
5) 启动2个tomcat
[root@localhost ~]# /usr/local/tomcat7/bin/startup.sh
[root@localhost ~]# /usr/local/tomcat72/bin/startup.sh
分别访问
http://192.168.3.128:8080/separate/
http://192.168.3.128:8081/separate/
页面显示对应的tomcat名称.
6)重启nginx
[root@localhost ~]# systemctl restart nginx.service
访问http://192.168.3.128/separate/
多次刷新页面,发现 tomcat7和tomcat72 字样轮流显示, OK. 集群成功!
7)可以测试停掉tomcat7,或者tomcat72, nginx还能正常访问,这样就可以部署的时候不影响用户访问了.
注意,不用加8080端口,此时图片访问不了,解决方法在第三步

3.Nginx+Tomcat实现动静分离、负载均衡

什么是动静分离
为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源比如图片,js,css等文件,我们可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时,代理服务器就可以直接处理,而不用将请求转发给后端服务器。用户请求的动态文件比如servlet,jsp则转发给Tomcat,Jboss服务器处理,这就是动静分离。这也是反向代理服务器的一个重要的作用。

本文的动静分离主要是通过nginx+tomcat来实现,其中nginx处理图片、html、JS、CSS等静态文件,tomcat处理jsp、servlet等动态请求。

基础知识了解完后,咱们来具体实践一下动静分离的感觉。负载均衡在这篇博客就不在介绍了,但是同样会配置出来,实现动静分离和负载均衡的效果。

对Nginx进行配置
通过配置location,对访问的请求进行拦截,①②都需要配置。
这里写图片描述
①在server模块添加内容
upstream local_tomcat {
server 192.168.3.128:8080;
server 192.168.3.128:8180;
}
② 在server模块下的location模块修改或添加内容
全部的请求均转发给Tomcat进行处理

location / {    proxy_next_upstream http_502 http_504 error timeout invalid_header;    proxy_pass http://local_tomcat;    # 真实的客户端IP    proxy_set_header   X-Real-IP        $remote_addr;     # 请求头中Host信息    proxy_set_header   Host             $host;     # 代理路由信息,此处取IP有安全隐患    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;    # 真实的用户访问协议    proxy_set_header   X-Forwarded-Proto $scheme;}

个别的请求比如:html,js,css等静态资源请求,由Nginx进行处理

#静态文件交给nginx处理location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {    root /usr/local/webapps;    expires 30d;}#静态文件交给nginx处理location ~ .*\.(js|css)?$ {    root /usr/local/webapps;    expires 1h;}

root /usr/local/webapps; 这段代码的意思是指定Nginx访问的目录,即静态资源所在的目录。
expires 30d; 指定这些资源文件在客户端浏览器的缓存时间。30d指的是30天,1h指的是1小时。

测试Nginx动静分离
根据上述配置文件,完成动静分离和负载均衡的配置,然后启动Nginx。
访问网址:http://192.168.3.128/separate/

可以看到图片没有加载出来。这是因为静态资源访问请求已经被Nginx拦截,由Nginx进行处理。但是Nginx服务器的 /usr/local/webapps 目录下并没有图片资源,所以图片没有加载出来。index.jsp页面能够显示,说明动态的请求已经转发到了Tomcat,Tomcat对index.jsp进行了解析。
解决办法
在Nginx服务器 /usr/local/webapps 目录下放置静态文件
创建/usr/local/webapps/separate/imgs目录
[root@localhost ~]# mkdir -p /usr/local/webapps/separate/imgs
拷贝文件到/usr/local/webapps/separate/imgs/
[root@localhost imgs]# cp -r /usr/local/tomcat7/webapps/separate/imgs/ /usr/local/webapps/separate/imgs/

刷新浏览器,图片就出来了

小结
从上述的实例可以看到已经初步实现了Nginx动静分离的功能,在配置动静分离后,用户请求你定义的静态资源,默认会去nginx的发布目录请求,而不会到后端请求,这样可以提高网站响应速度,减轻真实Web服务器的负载压力。

不过在开发环境下,为了便于开发,咱们的静态资源和代码还是放在一起的,等开发测试完成,才会将完成的完整程序部署到生成环境上,然而程序代码和静态资源是分别放置到不同的服务器上的。

阅读全文
0 0
原创粉丝点击