多个tomcat 多个域名

简介: 引用:http://hi.baidu.com/jinxingvenus/item/dfb47ad4b04580cf1b72b4e5  在实际的生产环境中,经常会遇到同一台服务器部署多个JSP应用的情况,为了方便维护和管理,通常会装多个Tomcat,每个Tomcat只部署一个JSP应用(当然,一个Tomcat同样可以部署多个JSP应用,但是单独维护个别应用就很不方便了,而且它们使用的jar包也不尽相同,容易出现冲突),这就要求每一个Tomcat都启用各自唯一的端口。

引用:http://hi.baidu.com/jinxingvenus/item/dfb47ad4b04580cf1b72b4e5

 在实际的生产环境中,经常会遇到同一台服务器部署多个JSP应用的情况,为了方便维护和管理,通常会装多个Tomcat,每个Tomcat只部署一个JSP应用(当然,一个Tomcat同样可以部署多个JSP应用,但是单独维护个别应用就很不方便了,而且它们使用的jar包也不尽相同,容易出现冲突),这就要求每一个Tomcat都启用各自唯一的端口。我们都知道通过域名访问主机的时候默认都是80端口(可以省略不写),但是如果开启的是其他端口,就必需在域名后指定(如:www.opseye.com:8080)才能访问服务器应用。这样问题就来了,我们不可能把每一个Tomcat都配置成80端口,所以这里就需要使用Nginx或Apache等web服务器软件给Tomcat做反向代理来解决,这样不但解决了域名访问需要加端口号的问题,还能实现动静态页面分离技术。都知道Tomcat处理静态页面的能力很差,正好,把不擅长做的交给Nginx来做吧,Nginx可是这方面的专家。

本文提纲:1,环境介绍2,相关开源软件准备3,JDK和Tomcat的安装4,Nginx编译安装和代理配置5,进行测试6,开机自启动7,注意事项——————————————————————————————————一,环境介绍

搭建平台:CentOS5.6  64bit

方式:Nginx和两个Tomcat(多个Tomcat方法一样)安装在同一台服务器上,当然Nginx也可以在另一台服务器上,不过没有这个必要。

服务器ip: 58.x.x.x

两个JSP应用:payment和esales

JSP应用payment对应的域名:pay.opseye.com

JSP应用esales对应的域名:esales.opseye.com

注意:上面两个域名在DNS那里都解析到 58.x.x.x 这个IP地址。

二, 相关开源软件准备

我习惯于把软件统一放在/usr/local/src ,纯属个人习惯。

JDK:可以从oracle官网获得 http://www.oracle.com/technetwork/java/javase/downloads/java-se-6u24-download-338091.html ,根据您自己的操作系统类型和位数选择合适的版本。

Tomcat:可以从Apache官网获得 http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.30/bin/

Nginx:可以从Nginx官网获得 http://nginx.org/en/download.html

1cd  /usr/local/src2 3wget  -c  http://download.oracle.com/otn-pub/java/jdk/6u24-b07/jdk-6u24-linux-x64-rpm.bin4 5wget -c   http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.30/bin/apache-tomcat-6.0.30.tar.gz6 7wget -c   http://nginx.org/download/nginx-1.0.10.tar.gz三,  JDK和Tomcat的安装

1,JDK的安装:

1cp/usr/local/src/jdk-6u24-linux-x64-rpm.bin /usr/2chmod+x /usr/jdk-6u24-linux-x64-rpm.bin3cd/usr/4./jdk-6u24-linux-x64-rpm.bin

出现提示输入yes or no时,输入yes.

安装完毕后,在/etc/profile文件末尾添加:

1JAVA_HOME=/usr/java/default2JRE_HOME=$JAVA_HOME/jre3PATH=$PATH:$JAVA_HOME/bin4CLASSPATH=./:$JAVA_HOME/lib:$JRE_HOME/lib5exportJAVA_HOME JRE_HOME PATH CLASSPATH

保存退出后执行:

1.  /etc/profile

以使设置的环境变量加载到当前session的系统环境中,Tomcat启动和关闭时会使用到这些变量。

2,Tomcat的安装,使用二进制版本,直接解压就可以用。

01cd/usr/local/src02 03tarzxf apache-tomcat-6.0.30.tar.gz -C /usr/local/04cd/usr/local/05 06# 准备payment应用的tomcat07mvapache-tomcat-6.0.30 tomcat_payment08 09# 准备esales应用的tomcat10cp-r tomcat_payment   tomcat_esales

3, 配置tomcat

创建网站根目录:nginx和tomcat共同使用

1mkdir-p /data/www/htdocs/

在网站根目录中 创建两个应用的目录:

1mkdir-p /data/www/htdocs/{payment,esales}

把tomcat启动需要的host-manager,manager(在tomcat_payment/webapps下) 拷贝到两个应用的目录:

1cp-r /usr/local/tomcat_payment/webapps/*   /data/www/htdocs/payment/2 3cp-r /usr/local/tomcat_payment/webapps/*  /data/www/htdocs/esales/

注意:把payment和esales两个应用程序分别放置在

/data/www/htdocs/payment/ROOT/

/data/www/htdocs/esales/ROOT/ 

配置两个应用的conf/server.xml:

1)端口配置:

只需要配置其中一个应用的即可(使其区别于另一个),我们配置第二个应用:esales

1<Server port="8006" shutdown="SHUTDOWN">2 3<Connector port="8081" protocol="HTTP/1.1"4 5<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" >

这样同时启用两个应用的时候,就不会出现端口冲突了。

2) 应用根目录配置:

esales应用:

1<Host name="localhost" appBase="/data/www/htdocs/esales"

payment应用:

1<Host name="localhost" appBase="/data/www/htdocs/payment"

分别启动两个tomcat:

1/usr/local/tomcat_payment/bin/startup.sh2 3/usr/local/tomcat_esales/bin/starup.sh

时时查看启动日志,看是否有报错:

1tail-f  /usr/local/tomcat_payment/logs/catalina.out

查看所有的端口是否已经在监听;

1netstat-nlpt四, Nginx编译安装和代理配置

1,编译安装Nginx

创建Nginx用户和组:

1/usr/sbin/groupadd www2/usr/sbin/useradd-g www www  -s /sbin/nologin

安装Nginx所需要的库:

1yum install-y pcre pcre-devel zlib zlib-devel openssl openssl-devel

pcre库用于支持使用perl的兼容正则,zlib库用户支持gzip压缩,openssl用于支持https协议。

非Centos系统的,可以通过下载相应的源码包进行编译安装。

编译安装Nginx:

01cd/usr/local/src/02 03tarzxf nginx-1.0.10.tar.gz04 05cdnginx-1.0.1006 07./configure --user=www --group=www \08--prefix=/usr/local/nginx \09--with-http_stub_status_module \10--with-http_ssl_module11 12make&& makeinstall  

如果编译过程有报错,很可能是系统没有安装gcc相关编译器或缺少类包,根据错误提示,逐一排查即可。

把nginx命令路径加到系统PATH标量中,方便使用:

1cat>>/etc/profile<<EOF2 3# Nginx4 5exportPATH=$PATH:/usr/local/nginx/sbin/nginx6 7EOF8 9.  /etc/profile

这样我们就可以在任意路径直接使用nginx命令来启动停止http服务了。

2,Nginx反向代理tomcat的配置

cat  /usr/local/nginx/conf/nginx.conf

001user www;002 003# 根据你服务器的cpu核数来确定此值004worker_processes 2;005 006error_log logs/error.log crit;007#error_log logs/error.log notice;008#error_log logs/error.log info;009 010#pid logs/nginx.pid;011 012worker_rlimit_nofile 65535;013 014# events事件主要用来确定Nginx使用哪种算法015events {016 use epoll;017 worker_connections 65535;018 }019 020http {021 include mime.types;022 default_type application/octet-stream;023 024 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '025 # '$status $body_bytes_sent "$http_referer" '026 # '"$http_user_agent" "$http_x_forwarded_for"';027 028# 由于Nginx用于代理Tomcat,所以记录访问日志的事情交给Tomcat来做好了,注释掉029#access_log logs/access.log main;030 031sendfile on;032 tcp_nopush on;033 tcp_nodelay on;034 035#keepalive_timeout 0;036 keepalive_timeout 65;037 038server_names_hash_bucket_size 128;039 client_header_buffer_size 32k;040 large_client_header_buffers 4 32k;041 client_max_body_size 300m;042 client_body_buffer_size 512k;043 044# 代理的相关参数设置045 proxy_connect_timeout 5;046 proxy_read_timeout 60;047 proxy_send_timeout 5;048 proxy_buffer_size 16k;049 proxy_buffers 4 64k;050 proxy_busy_buffers_size 128k;051 proxy_temp_file_write_size 128k;052 053# 启用gzip压缩,提高用户访问速度054 gzip on;055 gzip_min_length 1k;056 gzip_buffers 4 16k;057 gzip_http_version 1.1;058 gzip_comp_level 2;059 gzip_types text/plain application/x-javascript text/css application/xml;060 gzip_vary on;061 062# 配置需要代理的tomcat063upstream tomcat_payment {064server 127.0.0.1:8080;065 }066 067upstream tomcat_esales {068 server 127.0.0.1:8081;069 }070 071#  虚拟主机:payment.opseye.com072server {073 listen 80;074server_name  payment.opseye.com;075 index index.html index.htm index.jsp index.do default.jsp default.do login.jsp;076root /data/www/htdocs/payment/ROOT;077 078if (-d $request_filename){079 rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;080 }081 082# 动态页面,交给tomcat处理083location ~ \.(jsp|jspx|do|action)?$ {084 proxy_set_header Host $host;085 proxy_set_header X-Forwarded-For $remote_addr;086proxy_pass 087 }088 089# 用户浏览器端的缓存设置090location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {091 expires 10d;092 }093 094location ~ .*\.(js|css)?$ {095 expires 1h;096 }097 098access_log off;099 #charset koi8-r;100 #access_log logs/host.access.log main;101 }102 103#  虚拟主机:esales.opseye.com104server {105 listen 80;106 server_name  esales.opseye.com;107 index index.html index.htm index.jsp index.do default.jsp default.do login.jsp;108 root /data/www/htdocs/esales/ROOT;109 110if (-d $request_filename){111 rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;112 }113 114location ~ \.(jsp|jspx|do|action)?$ {115 proxy_redirect off;116 proxy_set_header Host $host;117 proxy_set_header X-Forwarded-For $remote_addr;118proxy_pass 119 }120 121location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {122 expires 10d;123 }124 125location ~ .*\.(js|css)?$ {126 expires 1h;127 }128 129access_log off;130 #charset koi8-r;131 #access_log logs/host.access.log main;132 }133 }

3,启动Nginx:

网站根目录权限设置:

1chown-R www.www  /data/www/htdocs/

在启动之前,我们先检查配置文件是否正确

1nginx -t

如果出现以下信息则表明配置正确

1nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok2nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

启动Nginx

1nginx

查看80端口是否已启动

1netstat-nlpt

如果修改了配置文件,可以通过下面命令实现平滑重启(或是说不影响业务情况下的重新加载配置文件)

1nginx -s reload五,进行测试

写个最简单的jsp页面,用来输出经典的Hello world!

cat   index.jsp

1<%2out.println("Hello world! payment");3%>

cat index1.jsp

1<%2out.println("Hello world! esales");3%>

把index.jsp和index1.jsp分别放到/data/www/htdocs/payment/ROOT和/data/www/htdocs/esales/ROOT

通过浏览器访问payment.opseye.com/index.jsp和esales.opseye.com/index1.jsp将分别看到:

1Hello world! payment2 3Hello world! esales

说明我们已经成功了:) 喝杯咖啡休息一下吧~

六,开机自启动

把Tomcat和Nginx的启动命令加入到/etc/rc.local

1cat>>/etc/rc.local<<EOF2# Tomcat3/usr/local/tomcat_payment/bin/startup.sh4/usr/local/tomcat_esales/bin/startup.sh5 6# Nginx7/usr/local/nginx/sbin/nginx8EOF七,注意事项:

有以下几点需要注意的:

1,注意看一下以上案例介绍中,关于Tomcat的网站根路径和Nginx网站根路径的区别

2,实现动静分离,把动态页面交给Tomcat处理。Nginx配置文件中关于此处的配置

1location ~ \.(jsp|jspx|do|action)?$ {2 proxy_redirect off;3 proxy_set_header Host $host;4 proxy_set_header X-Forwarded-For $remote_addr;5proxy_pass 6}

根据你自己的JSP应用程序,把动态页面的后缀名搞清楚,写全了,不要落下,否则会把落下的动态页面交给Nginx处理,结果可想而知,Nginx是没有这种能力的。。。

3,关于启动顺序,其实先启动Nginx或先启动Tomcat都可以。

不过建议先依次启动两个Tomcat ,再启动Nginx,至于为什么,自己想去:)

(全文完)

原创文章,转载请注明: 转载自关注运维技术

本文链接地址:http://www.opseye.com/sa/applications/nginx-proxy-multi-tomcat.html

相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
相关文章
|
安全 应用服务中间件
tomcat实现多端口、多域名访问【亲测可用】
tomcat实现多端口、多域名访问【亲测可用】
364 0
|
2月前
|
网络安全
tomcat8绑定两个https域名
tomcat8绑定两个https域名
|
应用服务中间件
通过域名直接访问Tomcat项目
通过域名直接访问Tomcat项目
278 0
通过域名直接访问Tomcat项目
|
Java 应用服务中间件 Spring
tomcat配置多域名站点启动时项目重复加载多次
在tomcat中配置多个Host的时候, 出现项目重复启动多次的情况. 刚开始以为是spring boot发布项目的时候自带了一个tomcat引起的, 后来发现不是
166 0
tomcat配置多域名站点启动时项目重复加载多次
|
应用服务中间件
Tomcat 配置支持不同的域名访问各自不同程序的配置方法
Tomcat 配置支持不同的域名访问各自不同程序的配置方法
136 0
|
域名解析 网络协议 Java
tomcat的域名以及多域名配置
tomcat的域名以及多域名配置
|
应用服务中间件 数据格式 XML
|
应用服务中间件 容器
Tomcat 7 的domain域名配置,Tomcat 修改JSESSIONID
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/catoop/article/details/64581325 应用场景: 公司有站点 www.shanhy.com、tow.shanhy.com、three.shanhy.com ……,站点使用 SpringMVC + Shiro + Redis 来实现的 session 子域共享。
1762 0
|
1月前
|
XML 应用服务中间件 Apache
Tomcat AJP连接器配置secretRequired=“true“,但是属性secret确实空或者空字符串,这样的组合是无效的。
Tomcat AJP连接器配置secretRequired=“true“,但是属性secret确实空或者空字符串,这样的组合是无效的。