我正在使用Hazelcast作为Jetty实例的webapp会话存储。在Jetty实例前面还有Nginx作为负载均衡器。
问题: 会话共享非常完美,因为我的两个码头服务器在不同的端口(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;
}
问题: 实际上,我想询问这种情况是否正常,或者有什么特别值得一提的设置?
以下是代码示例:
http://snipt.org/ziBa8 - Hazelcast.xml (左边几乎完好无损) http://snipt.org/ziBb2 - Hazelcast过滤来自webapp的代码 /WEB-INF/web.xml