之前CAS一直使用单机跑,接入应用也使用单机,没有什么问题。

但是,应用通过nginx代理后,就出现问题了,代理的端口访问,cas获取的是实际服务器的端口,就会造成票根不识别,错误如下:

Authentication failure: Ticket not validated
Reason: [INVALID_SERVICE] CAS error: 票根'ST-36-DvwsgyEPzwx16S1CmDHj1NJRX-Uecs-4806-0319730'不符合目标服务
CAS response: <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
    <cas:authenticationFailure code="INVALID_SERVICE">票根'ST-36-DvwsgyEPzwx16S1CmDHj1NJRX-Uecs-4806-0319730'不符合目标服务</cas:authenticationFailure>
</cas:serviceResponse>

问题在于nginx的代码配置问题,正确配置信息如下:


[#zeyu#]

proxy_set_header Host $http_host;
 proxy_set_header X-Real-IP $remote_addr;
 #proxy_set_header X-Forwarded-For $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;
 proxy_redirect false;

主要生效的代码是:
X-FORWARDED-HOST、X-FORWARDED-PORT 这一段

[/#zeyu#]

找了很久,谷歌百度都用了,搜关键词cas proxy nginx,可以搜到一些解决方案,但是均无法解决。最后是逐步尝试的,主要可能还是不精通nginx。