我正在使用Hazelcast作为Jetty实例的webapp会话存储 . 在Jetty实例前面还有Nginx作为负载均衡器 .

Problem: 会话共享非常完美,因为我的两个码头服务器在不同的端口(8080和8081)上并行工作 . 但是,当我重新启动一个Jetty实例(8081)时,我失去了我的共享会话 . 我使用默认的hazelcast.xml和过滤器,jar也正确地放入了webapp .

以下是使用会话对象的groovy-grails webapp代码的示例:

package jtest

class HomeController {

def index() {
if(!session.test){
session.test = 1
} else {
session.test++
}
render "port = " + request.getServerPort() + "; session = " + session.test 
}
}

nginx.conf 文件包含以下行:

upstream backend  {
    #ip_hash;
server 127.0.0.1:8081; # Reverse proxy to  BES1
server 127.0.0.1:8082; # Reverse proxy to  BES2
}

server {
    listen       8080;
    server_name  localhost;
location / {
    proxy_pass              http://backend;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        Host $http_host;
}

Question: 其实,我想询问这种情况是否正常,或者有什么特别值得一提的设置?

这是 code samples

http://snipt.org/ziBa8 - Hazelcast.xml (左边几乎完好无损)http://snipt.org/ziBb2 - Hazelcast过滤来自webapp的代码 /WEB-INF/web.xml