我使用 Hazelcast 作为 Jetty 实例的 webapp 会话存储。Jetty 实例前面还有 Nginx 作为负载均衡器。
问题: 会话共享非常完美,因为我的两个码头服务器在不同的端口(8080 和 8081)上并排工作。但是,当我重新启动一个 Jetty 实例 (8081) 时,我失去了共享会话。我使用默认的 hazelcast.xml 和过滤器,罐子也被正确地放入了 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;
}
问: 其实我想问问这种情况是正常的还是设置有什么特别要说的?
以下是代码示例:
http://snipt.org/ziBa8 - Hazelcast.xml(几乎完好无损) http://snipt.org/ziBb2 - Hazelcast 过滤来自 webapp /WEB-INF/web.xml的代码