当前位置: > Linux服务器 > nginx >

Nginx:服务器端SSL配置

时间:2014-10-28 11:38来源:linux.it.net.cn 作者:it

nginx安装与配置参考:http://hanqunfeng.iteye.com/blog/697696

一、nginx配置

 
  1. upstream  tomcats_ssl  
  2.         {  
  3.               server   192.168.33.10:8090 srun_id=tomcat01;   
  4.               server   192.168.33.11:8090 srun_id=tomcat02;  
  5.               jvm_route $cookie_JSESSIONID|sessionid reverse;        
  6.               #保证session同步,参考http://hanqunfeng.iteye.com/blog/1920994  
  7.               #需要cas验证的应用更要配置,否则会造成死循环。  
  8.         }  
  9.   
  10. server {    
  11.         listen 443;    
  12.         server_name nginx.server.name;    
  13.     
  14.         ssl on;   #开启ssl验证  
  15.         ssl_certificate /usr/local/nginx/sslkey/server.crt;  #证书  
  16.         ssl_certificate_key /usr/local/nginx/sslkey/server.key;   #密钥  
  17.         ssl_session_timeout 5m;  #session有效期,5分钟  
  18.         ssl_protocols SSLv2 SSLv3 TLSv1;   #ssl协议  
  19.         ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #ssl加密算法  
  20.         ssl_prefer_server_ciphers on;    
  21.         location /ssl_test/ {  
  22.                 proxy_pass http://tomcats_ssl;  
  23.                 include /usr/local/nginx/proxy.conf;  
  24.                 access_log  /usr/local/nginx/logs/01.ssl.log  main;  
  25.         }      
  26. }   

 

二、生成证书(这里是测试证书)

 
  1. [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中增加如下配置:

 
  1. 将  
  2. <Connector port="8090" protocol="HTTP/1.1"   
  3.                connectionTimeout="20000"   
  4.                redirectPort="8443" URIEncoding="UTF-8" />  
  5. 修改为:  
  6. <Connector port="8090" protocol="HTTP/1.1"   
  7.                connectionTimeout="20000"   
  8.                scheme="https" proxyName="nginx.server.name"  proxyPort="443"  
  9.                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)
------分隔线----------------------------
栏目列表
推荐内容