CAS客户端集群

巧了我就是萌 提交于 2020-12-22 06:18:30

##环境变量定义##

  • CAS_CLIENT_HOME : CAS Java客户端源码包目录(版本:3.2.1)
  • NGINX_HOME:nginx安装目录(版本:1.4.1)
  • PHP_HOME :php安装目录(版本: 5.5.1)
  • CATALINA_HOME: tomcat安装目录(版本: 7.0.42)

网络拓扑

网络拓扑图

集群原理

不管是Java还是PHP,还是其他语言的CAS客户端,集群要解决问题就是session同步。如果客户端在本地内存记录了与登陆状态有关的数据,那么这部分代码需要进行改造——把这部分的数据共享出去。

###CAS JavaEE客户端集群 ### 我们以tomcat 7自带的例子examples应用为例。假设你已经按照这里配置好,下面只需配置session同步以及同步单点登出。session同步不在这里累述。需要注意的是,web.xml中的 casServerUrlPrefixcasServerUrlPrefixserverName这几个参数的ip(或域名)指向nginx服务器。比如这里是192.168.121.130

这里要着重说说”同步单点登出“。 由于CAS 提供的Java客户端会将一些与登陆状态有关的数据记录在本地内存中,因此需要对$CAS_CLIENT_HOME的cas-client-core模块和cas-client-support-distributed-ehcache进行一些修改(我已将修改后的源代码放在这里 ).

先后将cas-client-core和cas-client-support-distributed-ehcache模块编译打包,然后把打包后的jar文件复制到$CATALINA_HOME/webapps/examples/WEB-INF/lib目录中。

打开web.xml, 在filter-name为CasSingleSignOutFilter的*<filter>*节点内添加一个初始化配置参数:

 <!-- lang: xml --> 
 <init-param>
        <param-name>sessionMappingStorageClass</param-name>
        <param-value>org.jasig.cas.client.session.EhcacheBackedSessionMappingStorage</param-value>
 </init-param>

nginx的反向代理配置也不在这里累述。

###CAS PHP客户端集群###

假设你已经按照这里配置好了PHP客户端.

首先启用php-memcached扩展,打开php.ini, 添加extension=memcached配置项, 并将

 <!-- lang: shell --> 
 session.save_handler = files
 session.save_path = "/tmp"

改成

<!-- lang: shell --> 
session.save_handler = memcached
session.save_path = "192.168.121.128:12221"  # 格式: ip或域名:端口,  多台memcached用逗号(,)隔开
memcached.hash_strategy = consistent

同时记得把memcached.so复制到php的加载目录中(默认是$PHP_HOME/php/ext)

接着,在192.168.121.130的nginx中配置反向代理:

<!-- lang: shell --> 
http{
    upstream phpserver {
        server 192.168.121.131: 8088 fail_timeout = 3s;
        server 192.168.121.132: 8088 fail_timeout = 3s;
    }

    upstream phpservers { 
        server 192.168.121.131: 9443 fail_timeout = 3s;  
        server 191.168.121.132: 9443 fail_timeout = 3s;
    }

    upstream cas-server { 
        server 192.168.121.129: 8080;  
    }
    
    upstream cas-servers { 
        server 192.168.121.129: 8443;
    }
    
    # ...

   server {
        listen   8088;       
        server_name  hostname; 
        # ... 
        proxy_redirect  http://192.168.121.130 /;
        proxy_redirect  http://localhost/  /;
    
        location ~ \.php$ {
            proxy_pass http://phpserver$uri$is_args$args;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-FORWARDED-HOST $server_addr;  
            proxy_set_header X-FORWARDED-PORT $server_port;
       }
    
        location ~ ^/cas/(.*)$ {
            proxy_pass  http://cas-server/cas/$1$is_args$args;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Real-IP        $remote_addr;
        }            
   } 
    server {
        listen       9443;
        server_name  localhost;
    
        ssl                  on;
        ssl_certificate      nginx-server.pem;
        ssl_certificate_key  nginx-private.key;

        proxy_redirect http://192.168.121.130/ /;
        proxy_redirect http://localhost/ /;

        location ~ ^/cas/(.*)$ {
            proxy_pass  https://cas-servers/cas/$1$is_args$args;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header   X-Real-IP        $remote_addr;
        }    

        location ~ \.php$ {
            proxy_pass  http://servers/$1$is_args$args;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header X-FORWARDED-HOST $server_addr;  
            proxy_set_header X-FORWARDED-PORT $server_port;
        }
    }
}

注意proxy_set_header X-FORWARDED-HOST $server_addr; proxy_set_header X-FORWARDED-PORT $server_port;是确保能正常实现登陆跳转的两行配置。

另外,要将$NGINX_HOME/html/config.php中的 $cas_host$cas_port分别改为 192.168.121.1309443

192.168.121.131和192.168.121.132上两台nginx的配置从略。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!