引用: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