文档章节

使用nginx和tomcat搭建集群环境

三平行者
 三平行者
发布于 2016/03/11 17:38
字数 1633
阅读 1672
收藏 41

一、先解释下什么是反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。这是百度百科上反向代理的定义,如果你对该定义有些模糊的话,继续 向下看。

实际上,我们配置了Nginx反向代理后,系统的物理结构可能是下面这样子的,

配置Nginx反向代理Tomcat

当我们访问一个域名/IP地址时,实际访问的是我们配置的Nginx 服务器,Nginx服务器的真实身份只是代理,它代理了许多不同的真正服务器(如下图中的Tomcat,Resin,IIS等)。这就是反向代理。

虽然配置反向代理比较麻烦,但是它的作用性还是很大滴。一方面是为了安全性考虑,另一方面是提供应用的访问性能。至于原理呢,本文就不详细介绍了。接下来配置Ngin的反向代理Tomcat,实现负载均衡和灾备的作用。


二、前期准备

 1、nginx的安装

(1)安装支持正则的pcre模块
# rpm -ivh  pcre-devel-6.6-2.el5_1.7.i386.rpm

ps:如果提示缺插件,需要root权限执行下面命令

[root@localhost tomcat]#
 yum install apr apr-devel apr-util apr-util-devel pcre-devel -y
(2)安装nginx

# wget http://nginx.org/download/nginx-1.9.9.tar.gz 
# tar zxvf nginx-1.9.9.tar.gz
# cd nginx-1.9.9
# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
# make 
# make install
(3)启动nginx
# /usr/local/nginx/sbin/nginx
(4)访问nginx(默认为80端口)
http://192.168.28.27

ps:如果访问不了,查看下防火墙设置,是否开放了80端口。修改防火墙配置,请问度娘。

2、tomcat 安装(略) 

1.如果需要修改tomcat发布目录为自己制定的目录,需要做如下调整,创建两个发布目录:

    mkdir -p /usr/webapps/{www1,www2} 

编辑vi /usr/local/tomcat1/conf/server.xml 在最后</Host>前一行加下内容:

    <Context  path="" docBase="/usr/webapps/www1" reloadable="false"/> 

2.编辑vi /usr/local/tomcat2/conf/server.xml 在最后</Host>前一行加下内容:

    <Context  path="" docBase="/usr/webapps/www2" reloadable="false"/> 

3.tomcat1发布目录内容:

    <html>   
    <body>   
    <h1>TOMCAT_1 JSP Test Page</h1>   
    <%=new java.util.Date()%>   
    </body>   
    </html>

4.tomcat2发布目录内容:

<html>   
    <body>   
    <h1>TOMCAT_2 JSP Test Page</h1>   
    <%=new java.util.Date()%>   
    </body>   
    </html>

然后访问http://ip:8080、8081查看测试内容。


三.nginx与tomcat整合

1. 在/usr/local/nginx/conf下面添加文件proxy.conf

# cat /usr/local/nginx/confg/proxy.conf

proxy_redirect          off;
proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr; #获取真实IP
#proxy_set_header       X-Forwarded-For   $proxy_add_x_forwarded_for; #获取代理者的真实ip
client_max_body_size    10m;
client_body_buffer_size 128k;
proxy_connect_timeout   90;
proxy_send_timeout      90;
proxy_read_timeout      90;
proxy_buffer_size       4k;
proxy_buffers           4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

 

2.配置nginx.conf

# cat /usr/local/nginx/confg/nginx.conf

下面内容复制到文件中:
user  www www;  #此处使用事先创建的www用户,也可以使用其他用户
worker_processes  1;
pid     /usr/local/nginx/logs/nginx.pid;

events {
    use epoll;
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    include     /usr/local/nginx/conf/proxy.conf;   #一定要指向代理文件,可以重命名

    sendfile        on;
    tcp_nopush      on;
    keepalive_timeout  65;

    upstream tomcat_server {#代理tomcat服务器

upstream tomcat_server {#代理tomcat服务器

            server 192.168.28.27:8080 weight=1 max_fails=2 fail_timeout=30s;

            server 192.168.28.28:8080 weight=1 max_fails=2 fail_timeout=30s;

            ip_hash; 

    }     

    server {

        listen       80;
        server_name  localhost;

        charset gb2312;

        location / {
             root /www/web/ROOT; #工程根目录
             index  index.html index.htm;
        }

        location ~ .*.jsp$ {     #匹配以jsp结尾的,tomcat的网页文件是以jsp结尾         
                index   index.jsp;
                proxy_pass   tomcat_server; #主要在这里,设置一个代理,对应上面的服务器配置
        }

        location /nginxstatus {
                stub_status on;
                access_log on;
                auth_basic "nginxstatus";
                auth_basic_user_file /usr/local/nagois/etc/htpasswd.users;
        }

        # redirect server error pages to the static page /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

 

3.测试

在/www/web/ROOT下添加文件index.jsp

# cat index.jsp   (可以使用此jsp做测试 http://blog.csdn.net/god_wot/article/details/46376167)
the port:80

重启nginx

http://192.168.28.27   #nginx部署在27上

http://192.168.28.28:8080   #tomcat部署在28上,27反代理到28,或者其他机器

http://192.168.28.27/index.jsp

ps:这个测试结果就是上面的index.jsp页面返回的结果。不停的刷新页面,就在27和28两台机器上倒腾,关掉28,就只显示27,反之亦然。实现了负载分担和双机热备的功能。

4.相关操作命令

nginx启动、重启、关闭

一、启动  

cd usr/local/nginx/sbin

./nginx

二、重启

更改配置重启nginx  

# /usr/local/nginx/sbin/nginx -s reload

或者kill -HUP 主进程号或进程号文件路径

或者使用

cd /usr/local/nginx/sbin

./nginx -s reload

 判断配置文件是否正确 

nginx -t -c /usr/local/nginx/conf/nginx.conf

或者

cd  /usr/local/nginx/sbin

./nginx -t

三、关闭

  查询nginx主进程号

  ps -ef | grep nginx

  从容停止   kill -QUIT 主进程号

  快速停止   kill -TERM 主进程号

  强制停止   kill -9 nginx

  若nginx.conf配置了pid文件路径,如果没有,则在logs目录下

  kill -信号类型 '/usr/local/nginx/logs/nginx.pid'

四、升级

  1、先用新程序替换旧程序文件

  2、kill -USR2 旧版程序的主进程号或者进程文件名

    此时旧的nginx主进程会把自己的进程文件改名为.oldbin,然后执行新版nginx,此时新旧版本同时运行

  3、kill -WINCH 旧版本主进程号

  4、不重载配置启动新/旧工作进程

    kill -HUP 旧/新版本主进程号

    从容关闭旧/新进程

    kill -QUIT 旧/新进程号

    快速关闭旧/新进程

    kill -TERM 旧/新进程号

四.问题收集

1、重启tomcat,卡了30秒

环境搭建好后,webbench了一下,并发提升了3倍,太牛掰了吧。不过,重启其中一台tomcat27,点击网页,卡了30秒,才恢复正常,没有及时切换过去,不过服务未中断。(待解决)

2、登录时,图片校验失败,Session未实现共享

测试功能,所有请求都正常,就是登录时的图片校验失败,原因是从27上发来的图片,发到28上校验,取不到session里存的图片校验码,所以验证失败,在nginx的upstream上加了一个参数ip_hash; 就恢复正常了!不过,不是最优的,还可以使用Memcached来实现session共享的功能。后面再开新篇说明。



© 著作权归作者所有

共有 人打赏支持
三平行者
粉丝 3
博文 32
码字总数 14655
作品 0
海淀
项目经理
私信 提问
加载中

评论(1)

zhdan
zhdan
给力
对单机架构升级集群架构的工作记录

概述 还有公司敢用单机模式架构,狠狠的擦了一把汗。。在此萌生了改造单机架构模式,自行网上搜索出一套适合公司的高可用架构,才大致了解完毕。领导就召集大家说了现有单机模式的弊端。。 ...

java_龙
2017/06/22
0
0
Nginx入门之搭建集群

Nginx入门之搭建集群 本篇文章主要讲解如何使用Nginx在Windows环境中搭建Tomcat集群。 Nginx是什么? Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。...

陈文洁945
2017/12/06
0
0
Nginx + Tomcat 负载均衡集群

Nginx + Tomcat 负载均衡集群 -- 实验环境: -- 部署Tomcat -- 安装 JDK 配置 java 环境,解压 jdk 移动到 /usr/local 下命名为java: 在 /etc/profile.d/ 下面建立java.sh 脚本,内容如下:...

HHHNDYD
2018/06/20
0
0
consul-template + nginx部署高可用负载均衡

一、目标 1、Nginx实现负载均衡 2、consul-template动态维护Nginx里面的server 3、consul-template监控Consul集群 4、每个服务配置Consul做服务发现 5、最终目的,当服务(Consul)Down机时;...

yzy121403725
2018/08/23
0
0
nginx + tomcat提示temporarily unavailable

在linux上搭建的Nginx+tomcat的环境,使用了集群。有时个在请求页面时会出现以下错误: The page you are looking for is temporarily unavailable. Please try again later. 单独访问Nginx...

IT_小翼
2013/02/19
247
0

没有更多内容

加载失败,请刷新页面

加载更多

精品书籍推荐

JavaScript书籍推荐 1、[JavaScript高级程序设计(第3版)] 2、你不知道的JavaScript(中卷) 3、ES6标准入门(第二版)阮一峰

轻轻的往前走
13分钟前
2
0
JVM(六)为什么新生代有两个Survivor分区?

本文会使用排除法的手段,来讲解新生代的区域划分,从而让读者能够更清晰的理解分代回收器的原理,在开始之前我们先来整体认识一下分代收集器。 分代收集器会把内存空间分为:老生代和新生代...

王磊的博客
18分钟前
5
0
程序员最喜欢的15款文本编辑器推荐

程序员最喜欢的15款文本编辑器推荐 2017年09月18日 17:30:50 kangle_zhu 阅读数:59390 转载地址:http://www.cr173.com/html/50553_1.html 很多时候比如编程查看代码或者打开各种文档下我们...

linjin200
20分钟前
6
0
如何在php后端及时推送消息给客户端

walkor大神,目前需求是这样的: 有一群商家在后台网页处理批量导入产品 -》 服务器接受请求 -》 开始foreach一个一个处理导入请求; 我现在想每成功导入一个就推送到前台显示已经导入成功,...

dragon_tech
39分钟前
13
0
Java利用hanlp完成语句相似度分析的案例详解

分享一篇hanlp分词工具使用的小案例,即利用hanlp分词工具分析两个中文语句的相似度的案例。供大家一起学习参考! 在做考试系统需求时,后台题库系统提供录入题目的功能。在录入题目的时候,...

左手的倒影
45分钟前
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部