多个tomcat 多个域名

本文涉及的产品
.cn 域名,1个 12个月
简介: 引用: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

相关文章
|
安全 应用服务中间件
tomcat实现多端口、多域名访问【亲测可用】
tomcat实现多端口、多域名访问【亲测可用】
561 0
|
4月前
|
网络协议 Java 应用服务中间件
tomcat配置域名及HTTPS
tomcat配置域名及HTTPS
|
7月前
|
网络安全
tomcat8绑定两个https域名
tomcat8绑定两个https域名
|
应用服务中间件
通过域名直接访问Tomcat项目
通过域名直接访问Tomcat项目
365 0
通过域名直接访问Tomcat项目
|
Java 应用服务中间件 Spring
tomcat配置多域名站点启动时项目重复加载多次
在tomcat中配置多个Host的时候, 出现项目重复启动多次的情况. 刚开始以为是spring boot发布项目的时候自带了一个tomcat引起的, 后来发现不是
208 0
tomcat配置多域名站点启动时项目重复加载多次
|
应用服务中间件
Tomcat 配置支持不同的域名访问各自不同程序的配置方法
Tomcat 配置支持不同的域名访问各自不同程序的配置方法
195 0
|
域名解析 网络协议 Java
tomcat的域名以及多域名配置
tomcat的域名以及多域名配置
|
16天前
|
弹性计算 移动开发 安全
阿里云域名注册、续费收费标准价格表及最新优惠口令获取及使用教程参考
阿里云域名注册和续费收费标准在9月份随着全球域名价格的上涨,域名收费标准也做了调整,目前阿里云的.com英文域名的注册价格为83元,续费收费标准为90元,为了让更多用户在注册和续费时价格能更加实惠,阿里云推出了域名优惠口令活动,域名优惠口令适合在域名注册和续费时使用,使用优惠口令通常可以使注册和续费价格减免几元到十几元不等,例如使用优惠口令续费.com域名就可减少5元。本文为大家展示目前阿里云域名注册和续费的最新收费标准以及如何领取和使用域名优惠口令的相关教程,以供参考。
248 11
|
2月前
|
域名解析 网络协议
非阿里云注册域名如何在云解析DNS设置解析?
非阿里云注册域名如何在云解析DNS设置解析?
|
2月前
|
存储 安全 数据库
阿里云最新域名注册和续费、企业邮箱、云虚拟主机收费标准与价格参考
域名注册和续费以及企业邮箱和云虚拟主机是很多用户上云第一步需要购买的产品,从2024年9月1日开始,全球域名又迎来了一波价格上调,目前阿里云的.com英文域名的注册价格由原来的78元涨价到了83元,续费价格也涨到了90元,不过企业新用户注册有1元购等活动。企业邮箱目前活动价540.00元/1年起,云虚拟主机独享基础增强版月付49元/1个月起,年付588元/1年起。本文为大家整理汇总了截止目前,阿里云域名注册和续费及转入收费标准、企业邮箱收费标准与活动价格、云虚拟主机最新收费标准,以供参考。