| 
       
	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) |