nginx安装与配置参考:http://hanqunfeng.iteye.com/blog/697696
一、nginx配置
-
upstream tomcats_ssl
-
{
-
server 192.168.33.10:8090 srun_id=tomcat01;
-
server 192.168.33.11:8090 srun_id=tomcat02;
-
jvm_route $cookie_JSESSIONID|sessionid reverse;
-
#保证session同步,参考http:
-
#需要cas验证的应用更要配置,否则会造成死循环。
-
}
-
-
server {
-
listen 443;
-
server_name nginx.server.name;
-
-
ssl on; #开启ssl验证
-
ssl_certificate /usr/local/nginx/sslkey/server.crt; #证书
-
ssl_certificate_key /usr/local/nginx/sslkey/server.key; #密钥
-
ssl_session_timeout 5m; #session有效期,5分钟
-
ssl_protocols SSLv2 SSLv3 TLSv1; #ssl协议
-
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #ssl加密算法
-
ssl_prefer_server_ciphers on;
-
location /ssl_test/ {
-
proxy_pass http:
-
include /usr/local/nginx/proxy.conf;
-
access_log /usr/local/nginx/logs/01.ssl.log main;
-
}
-
}
二、生成证书(这里是测试证书)
-
[root@localhost sslkey]# openssl req -new -x509 -nodes -out server.crt -keyout server.key
三、测试
重启nginx,请求:https://nginx.server.name/ssl_test,普通应用即可成功打开。
四、需要cas验证的应用
如果后端应用是需要cas登录验证的,则在成功登录cas回调后端服务器时会发生https协议转换为http协议,同时端口443转换为80的情况,导致应用不可正常访问,
例如https://nginx.server.name/ssl_test被cas回调后变为http://nginx.server.name/ssl_test,
目前的解决方案是,在后端服务的tomcat的server.xml中增加如下配置:
-
将
-
<Connector port="8090" protocol="HTTP/1.1"
-
connectionTimeout="20000"
-
redirectPort="8443" URIEncoding="UTF-8" />
-
修改为:
-
<Connector port="8090" protocol="HTTP/1.1"
-
connectionTimeout="20000"
-
scheme="https" proxyName="nginx.server.name" proxyPort="443"
-
redirectPort="8443" URIEncoding="UTF-8" />
scheme
调用request.getScheme()时返回的协议名称。比如,在SSL Connector上可能将这个属性设为“https”。缺省值为“http”。
proxyName
如果connector在代理配置中使用,将这个属性设置成调用request.getServerName()时返回的服务器名称。
proxyPort
如果Connector在代理配置中使用,这个属性指定了调用request.getServerPort()返回的端口值。
在Tomcat位于代理服务器后面时,可以使用proxyName和proxyPort属性。这些属性修改了调用 requset.getServerName()和request.getServerPort()的返回值,用来构造重定向的绝对URL。如果不设置这 些值,返回值反映了代理服务器收到的连接的服务器名称和端口号,而不是客户端发起的服务器名称和端口号。
(责任编辑:IT) |