转自:http://blog.chinaunix.net/uid-14007440-id-3150269.html
本文通过cookie_session来判别,解决了Nginx session不同步问题。
AD:
测试环境:
server1 服务器上安装了 nginx + resin
server2 服务器上只安装了 resin
server1 IP 地址: 192.168.6.121
server2 IP 地址: 192.168.6.162
安装步骤:
shell $> svn checkout http
://nginx-upstream-jvm-route.googlecode.com/svn/trunk/ nginx-upstream-jvm-route-read-only
shell $> tar zxvf nginx-0.7.61
shell $> cd nginx-0.7.61
shell $> patch -
p0
<
../nginx-upstream-jvm-route-read-only/jvm_route.patch
shell $> useradd www
shell $> ./configure --user=www --group=www
--prefix=/usr/local/webserver/nginx --with-http_stub_status_module
--with-http_ssl_module
--add-module=/root/nginx-upstream-jvm-route-read-only
shell $> make
shell $> make install
2.分别在两台机器上 安装 resin
### 修改环境变量###
shell $> vim /etc/profile
###在 umask 022 下填加以下###
JAVA_HOME=/usr/lib/jvm/java-6-sun
export JAVA_HOME
JRE_HOME="${JAVA_HOME}"/jre
export JRE_HOME
CLASSPATH=.:"${JAVA_HOME}"/lib/tools.jar:"${JAVA_HOME}"/lib/dt.jar${RESIN_HOME}"/lib/resin.jar:"${CLASSPATH}
export CLASSPATH
RESIN_HOME=/usr/local/resin
export RESIN_HOME
PATH="${JAVA_HOME}"/bin:"${PATH}"
export PATH
shell $> tar zxvf resin-3.1.9.tar.gz
shell $> cd resin-3.1.9
shell $> ./configure --prefix=/usr/local/resin
shell $> make
shell $> make install
3. 配置两台机器 的 resin
shell $> cd /usr/local/resin
shell $> cd conf
shell $> vim resin.conf
## 查找 <http address="*" port="8080"/>
## 注释掉 <!--http address="*" port="8080"/-->
## 查找 <server id="" address="127.0.0.1" port="6800">
## 替换成
<server id="a" address="192.168.6.121" port="6800">
<!-- server2 address=192.168.6.162 -->
<http id="" port="8080"/>
</server>
<server id="b" address="192.168.6.121" port="6801">
<!-- server2 address=192.168.6.162 -->
<http id="" port="8081"/>
</server>
shell $> cd /usr/local/resin/webapps/ROOT/
shell $> mv index.jsp index.jsp.bak
shell $> vim index.jsp
## 填入以下内容
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
%>
<html>
<head>
</head>
<body>
121
<!--server2 这里为 162 -->
<br />
<%out.print(request.getSession()) ;%>
<!--输出session-->
<br />
<%out.println(request.getHeader("Cookie")); %>
<!--输出Cookie-->
</body>
</html>
###重启 resin 服务#####
### server1 服务器#####
shell $> /usr/local/resin/bin/httpd.sh -server a start
###注意 如果没修改 环境变量会报错
### server2 服务器 ####
shell $> /usr/local/resin/bin/httpd.sh -server b start
### 注意的是 server2 服务器 只启动 server_id b ###
4.整合 ngxin resin
shell $> cd /usr/local/nginx/conf
shell $> mv nginx.conf nginx.bak
shell $> vim nginx.conf
## 以下是配置 ###
user www www;
worker_processes 4;
error_log logs/nginx_error.log crit;
pid /usr/local/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 2048;
}
http
{
upstream backend {
server 192.168.6.121:8080 srun_id=a;
#### 这里 srun_id=a 对应的是 server1 resin 配置里的 server id="a"
server 192.168.6.162:8081 srun_id=b;
#### 这里 srun_id=b 对应的是 server2 resin 配置里的 server id="b"
jvm_route $cookie_JSESSIONID|sessionid;
}
include mime.types;
default_type application/octet-stream;
#charset gb2312;
charset UTF-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 20m;
limit_rate 1024k;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
#gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#limit_zone crawler $binary_remote_addr 10m;
server
{
listen 80;
server_name 192.168.6.121;
index index.html index.htm index.jsp;
root /var/www;
location ~ .*\.jsp$
{
proxy_pass
http://backend
;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
location /stu {
stub_status on;
access_log off;
}
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
# access_log off;
}
}
5.测试,打开浏览器,输入 http://192.168.6.121/index.jsp
session 显示 aXXXXX 访问的是 121 服务器也就是 server1,因为是第一次访问所以Cookie 没有获得,刷新一下看他是否轮询会访问到 162 server2.
刷新 N 遍后仍然是 121,也就是补丁起作用了,cookie 值 也获得了,为了测试,我又打开了 “火狐浏览器”(因为session 和 cookie问题所以从新打开别的浏览器),输入网址:
显示的是 162 ,session 值 是以 bXXX 开头的,刷新 N遍后:
仍然是 162 server 2服务器!!大家测试的时候如果有疑问可一把 nginx 配置文件的
srun_id=a srun_id=b 去掉,然后在访问,就会知道 页面是轮询访问得了!!
我上传的补丁清在 linux 系统上解压,因为 51cto 不支持 gz格式,所以我就改了一后缀名,在linux 系统上执行
shell $> tar zxvf nginx-upstream-jvm-route-read-only.rar
就可以了!
tomcat 的解决方法 README 上有:
1.For resin
upstream backend {
server 192.168.0.100 srun_id=a;
server 192.168.0.101 srun_id=b;
server 192.168.0.102 srun_id=c;
server 192.168.0.103 srun_id=d;
jvm_route $cookie_JSESSIONID|sessionid;
}
2.For tomcat
upstream backend {
server 192.168.0.100 srun_id=a;
server 192.168.0.101 srun_id=b;
server 192.168.0.102 srun_id=c;
server 192.168.0.103 srun_id=d;
jvm_route $cookie_JSESSIONID|sessionid reverse;
}
分享到:
相关推荐
泛微 ecology nginx+resin集群部署说明文档,详细讲解ecology 集群部署的实施方式方法及步骤。
这里我们讨论的主题是如何通过Nginx、Tomcat和Memcached来实现集群环境下的session共享。Nginx作为反向代理服务器,负责负载均衡,Tomcat作为应用服务器运行Java Web应用程序,而Memcached则作为分布式内存缓存系统...
- 启动Nginx和Resin服务器,通过访问Nginx的公共IP或域名测试集群功能。 - 监控与优化:使用工具如Nginx的access.log和error.log,以及Resin的日志监控集群状态。根据性能指标调整Nginx和Resin的配置,如超时时间...
两边通过同一个nginx进行反向代理,nginx配置大致如下, location /health/ { proxy_pass http://192.168.40.159:8081/health/; #无问题的配置 } location /health-dev/ { proxy_pass ...
为了提高系统的可用性和性能,通常会采用集群部署的方式,而在此过程中,Nginx 和 Resin 服务器的结合使用是非常常见的一种架构。Nginx 作为反向代理和负载均衡器,Resin 则作为应用服务器,负责处理业务逻辑。 一...
本文将详述如何使用Tomcat、Nginx和Redis来搭建这样的集群,并着重讲解Session共享的问题,因为这是多服务器环境中的关键挑战。 **标题:Redis+nginx集群部署** **描述:**在本实践中,我们将结合Tomcat应用服务器...
nginx,tomcat集群,session共享,基于memcache 包含nginx配置,tomcat配置,以及tomcat所需要的jar 不包含nginx,tomcat,jdk,memcache的安装
标题 "Nginx+Tomcat+Memcached集群Session共享" 描述了在分布式环境中如何通过Nginx反向代理服务器、Tomcat应用服务器集群以及Memcached缓存系统来实现Session的共享。这是一个常见的高可用性和负载均衡解决方案。...
【Nginx Tomcat集群与Session复制】 在高并发、高可用的Web应用环境中,使用Nginx作为负载均衡器,结合Tomcat集群是常见的架构选择。为了保证用户体验的连续性,Session复制技术用于在多个Tomcat实例之间共享用户...
"nginx+tomcat+session同步" bản文中,我们将详细讨论使用nginx和tomcat实现session同步的方法。 首先,让我们了解什么是session同步。Session同步是指在多台服务器上共享用户会话状态,以确保用户在不同服务器...
Nginx Tomcat 集群的Session 复制,解决了,集群情况下的session复制问题。
总结来说,Nginx+Resin的组合是一种常见的Web服务架构,利用Nginx的高效性能和Resin的强大Java应用支持,为大型网站和企业应用提供可靠且高效的解决方案。理解并熟练掌握这两个工具的配置和协作,对于任何IT专业人士...
在IT行业中,Nginx和Resin是两种广泛使用的服务器软件。Nginx以其高性能、低内存占用和反向代理能力而闻名,而Resin则是一款基于...无论是对于运维人员还是开发人员,这些知识都将极大地提升你的技能和解决问题的能力。
通过以上步骤,我们可以构建一个基于nginx、tomcat和redis的服务器集群,有效地实现了session共享。这种架构不仅提高了系统的可用性和扩展性,还保证了用户在集群中的体验一致性。在实际应用中,还可以根据需求调整...
通过Nginx的负载均衡功能,可以实现集群中的服务器之间的请求分发,从而提高系统的可用性和可靠性。 接着,Redis作为一个高速缓存数据库,特别适合用于存储临时但频繁访问的数据,如session。当用户在任一应用中...
在构建分布式系统时,session共享是一个关键问题,特别是在使用多个服务器来处理用户请求的集群环境中。本主题将详细探讨如何在Windows7环境下,利用Nginx作为负载均衡器,Memcached作为session存储,以及Tomcat作为...
tomcat集群及session共享,亲测成功,下载的文件包含了所有需要的jar包及nginx,memcached安装,配置,由于试了很多种方法,下了很多包,有些也需要积分,所以这里下载要些积分留着用,不好意思了,如果配置过程中有...
【标题】"resin+nginx+使用说明文档" ...通过深入学习和理解"resin配置.txt"和"resin-4.0-admin.pdf"中的内容,以及实践安装和配置"resin-4.0.16.zip"和"nginx-1.0.5.zip",开发者可以更好地掌握这两种技术的集成使用。
Apache、Nginx和Resin都是在Web服务器领域中广泛使用的软件。Apache是经典的HTTP服务器,Resin是一款高性能的Java应用服务器,而Nginx以其高效的反向代理和负载均衡能力著称。将这三者结合使用,可以构建出一个高...