您的位置:首页 > 运维架构 > 反向代理

nginx+tomocat实现简单的反向代理

2014-05-07 11:43 501 查看
一、快速安装nginx反向代理tomcat

实验环境:在一台服务器上安装一台nginx+3台tomcat,通过修改tomcat端口号实现反向代理

127.0.0.1 nginx
127.0.0.1:8080 tomcat1
127.0.0.1:8081 tocmat2
127.0.0.1:8082 tomcat3

如果没有实现常链接可能是版本不兼容

1.安装nginx所需软件包

# yum -y install java pcre pcre-devel library gzip
zlib zlib-devel openssl gcc

2.安装jdk1.7 和tomcat6.0.41和nginx1.4.7

# wget http://download.oracle.com/......
# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-6/v6.0.41/bin/apache-tomcat-6.0.41.tar.gz
# wget http://nginx.org/download/nginx-1.4.7.tar.gz
3.解压jdk到/usr/loca/下

并配置jdk环境变量

#vi .bash_profile /// 修改当前用户的环境变量

JAVA_HOME=/usr/local/jdk1.7.0_71 /// jdk的安装目录
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export PATH JAVA_HOME ///每次启动tomcat都会从 JAVA_HOME去执行

4.使环境变量生效
#source /etc/profile
#java -version

5.解压tomcat到/usr/local/下

7.启动tomcat

#cd /usr/local/apache-tomcat-6.0.41/bin/

可以看日志

cd /usr/local/apache-tomcat3/apache-tomcat-6.0.41/logs/catalina.out
#./startup.sh

8.http://ip:8080访问tomcat

9.解压nginx到/usr/local/下并编译安装

保持连接模块需要下载 nginx_upstream_jvm_route 这个插件
结合js模块需要下载 nginx-http-concat 这个插件

先执行patch -p0 </app/nginx_upstream_jvm_route/jvm_route.patch //使会话保持模块生效

#./configure --prefix=/usr/local/nginx --add-module=/app/wodsy/soft/nginx_upstream_jvm_route(会话保持模块)
--add-module=/app/wodsy/soft/nginx-http-concat(结合js模块)

#make && make install

10. 修改nginx配置文件

#vi /usr/local/nginx/conf/nginx.conf

upstream www.benet.com { //www.benet.com下定义的主机群
server 192.168.204.128:8080;
server 192.168.204.129:8080;
server 192.168.204.130:8080;
}
server {
listen 80; //侦听nginx的端口号
server_name www.benet.com; //访问的域名

location / { //跟(/)下的所有
proxy_pass http://www.benet.com; //跳转到 www.benet.com
}
【以上的解释是】

当访问www.benet.com下的跟(/)下的所有文件时,则,通过【proxy_pass】跳转到www.benet.com,并由【upstream】调度www.benet.com下的机群地址

参数说明:

【upstream】 开始调度机群
使用格式
upstream www.xxx.com {
server ip:port;
server ip:port;
server .......
}
【server】 开始配置虚拟主机
【listen】 侦听nginx端口号
【server_name】 虚拟主机域名(被访问的域名)
【location】 定义访问的目录
【proxy_pass】 定义要跳转到哪里

11.保存并启动nginx
#cd /usr/local/nginx/sbin/
#./nginx
#ps -axu | grep nginx

12.如果没做域名解析,则,在hosts文件里面知道域名对应ip,客户端也要指定
#vi /etc/hosts
192.168.204.128 www.benet.com
13:访问http://www.benet.com 实现对192.168.204.128-130的轮询访问

二、在一台服务器上通过修改端口开启多台tomcat

1.之前有安装过一台tomcat,再安装tomcat2和tomcat3时,只需要拷贝tomcat1安装目录到其他目录并修改端口号即可

【tomcat1】 /usr/local/apache-tomcat1/
【tomcat2】 /usr/local/apache-tomcat2/
【tomcat3】 /usr/local/apache-tomcat3/

3.修改tomcat端口号

【进入第一个tomato配置文件(保持默认)】
#vi /usr/local/apache-tomcat1/apache-tomcat-6.0.41/conf/server.xml

第一处:<Server port="8005" shutdown="SHUTDOWN">
第二处:<Connector port="8080" protocol="HTTP/1.1"
第三处:<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
【进入第二个tomato配置文件】

第一处:<Server port="8006" shutdown="SHUTDOWN"> 【8005改为8006】
第二处:<Connector port="8081" protocol="HTTP/1.1"【8080改为8081】
第三处:<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />【8009改为8010】

【进入第三个tomato配置文件】

第一处:<Server port="8007" shutdown="SHUTDOWN"> 【8005改为8007】
第二处:<Connector port="8082" protocol="HTTP/1.1"【8080改为8082】
第三处:<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />【8009改为8011】

之后就可以启动tomcat并访问了

【nginx_upstream_jvm_route的使用】

nginx_upstream_jvm_route 是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。

安装方法(进入Nginx源码目录):

#patch -p0 < /path/to/this/directory/jvm_route.patch //使常链接生效

# ./configure --prefix=/usr/nginx-0.8.1 --with-http_stub_status_module --add-module=/path/to/this/directory/

#make

#make install

例如以下配置:

1. 进入nginx的配置文件修改以下:

upstream www.benet.com {
server 192.168.0.100:8080 srun_id=a; srun_id这个值必须对应tomcat配置文件的nginx_upstream_jvm_route的值
server 192.168.0.101:8081 srun_id=b;
server 192.168.0.102:8082 srun_id=c;
server 192.168.0.103:8083 srun_id=d;

jvm_route $cookie_JSESSIONID|jsessionid reverse;
}

2. 进入tomcat配置文件修改以下:



<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="JVM">
-->
<Engine name="Catalina" defaultHost="localhost">

改为

<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="JVM">
-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> tomcat1就是nginx中srun_id 对应的值

nginx平滑重启

nginx -t -c /usr/local/nginx/conf/nginx.conf
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息