首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > 高性能WEB开发 >

nginx + tomcat + ssl 配置 有关问题

2013-09-12 
nginx + tomcat + ssl 配置 问题直接入正题在网上找了很多nginx+tomcat+ssl的文章但是配置下来,都是http访

nginx + tomcat + ssl 配置 问题
直接入正题
在网上找了很多nginx+tomcat+ssl的文章
但是配置下来,都是http访问ok
https访问一直都是400 错误,
配置如下:
nginx.conf:
#定义Nginx运行的用户和用户组
#user  nobody;
#nginx进程数,建议设置为等于CPU总核心数。
worker_processes  1;
events {
    worker_connections 1024;
}
http {
    #文件扩展名与文件类型映射表
    include       mime.types;
    #默认文件类型
    default_type  application/octet-stream;
    client_max_body_size 8m; 
    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 
    keepalive_timeout 120;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    gzip  on; 
    upstream test_client_https.com{
server 192.168.2.120:9444;
    } 
    upstream test_client_http.com{
server 192.168.2.120:9081;
    }
    map $scheme $fastcgi_https {
    default off;
https on;
    }
      server {
        listen       9080;
        #域名可以有多个,用空格隔开
        server_name  localhost clientAuth Catalina;
        charset utf-8; 
        location ~ ^/NginxStatus{
            stub_status on;        
        }
        location / {
            proxy_pass http://test_client_http.com;
    proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header SSL_CERT $ssl_client_cert; 


            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
            #允许客户端请求的最大单文件字节数
    client_max_body_size 10m; 
            #缓冲区代理缓冲用户端请求的最大字节数,
    client_body_buffer_size 128k; 
            #nginx跟后端服务器连接超时时间(代理连接超时)
    proxy_connect_timeout 90;
            #后端服务器数据回传时间(代理发送超时)
    proxy_send_timeout 90; 
            #连接成功后,后端服务器响应时间(代理接收超时)
    proxy_read_timeout 90;
            #设置代理服务器(nginx)保存用户头信息的缓冲区大小 
    proxy_buffer_size 4k; 
            #proxy_buffers缓冲区,网页平均在32k以下的设置
    proxy_buffers 4 32k;
            #高负荷下缓冲大小(proxy_buffers*2)
    proxy_busy_buffers_size 64k;
    #设定缓存文件夹大小,大于这个值,将从upstream服务器传
    proxy_temp_file_write_size 64k;
        }
    }
    server {
        listen       9443 ssl;
        #域名可以有多个,用空格隔开
        server_name  localhost clientAuth Catalina;
        charset utf-8;
        #access_log  logs/host.access.log  main;
        ssl on;
        ssl_certificate E:/test/test/SSL/server/tomcat.key.crt;
        ssl_certificate_key E:/test/test/SSL/server/tomcat.key.key;
        ssl_client_certificate E:/test/test/SSL/client/client.cer;#双向认证
        ssl_verify_client on; #双向认证

        ssl_session_timeout  5m;
        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+PKCS12:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;


        ssl_prefer_server_ciphers   on;

        location ~ ^/NginxStatus{
            stub_status on;        
        }
        location / {
            proxy_pass https://test_client_https.com;
    proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header SSL_CERT $ssl_client_cert; 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
            #允许客户端请求的最大单文件字节数
    client_max_body_size 10m; 
            #缓冲区代理缓冲用户端请求的最大字节数,
    client_body_buffer_size 128k; 
            #nginx跟后端服务器连接超时时间(代理连接超时)
    proxy_connect_timeout 90;
            #后端服务器数据回传时间(代理发送超时)
    proxy_send_timeout 90; 
            #连接成功后,后端服务器响应时间(代理接收超时)
    proxy_read_timeout 90;
            #设置代理服务器(nginx)保存用户头信息的缓冲区大小 
    proxy_buffer_size 4k; 
            #proxy_buffers缓冲区,网页平均在32k以下的设置
    proxy_buffers 4 32k;
            #高负荷下缓冲大小(proxy_buffers*2)
    proxy_busy_buffers_size 64k;
    #设定缓存文件夹大小,大于这个值,将从upstream服务器传
    proxy_temp_file_write_size 64k;
        }
    }
}
tomcat -->server.xml
<?xml version='1.0' encoding='utf-8'?>
<Server port="9005" shutdown="SHUTDOWN"> 
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 
  <Listener className="org.apache.catalina.core.JasperListener" /> 
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> 


  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 
  <GlobalNamingResources> 
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources> 
  <Service name="Catalina"> 
    <Connector port="9081" protocol="HTTP/1.1"   connectionTimeout="20000"   redirectPort="9443" /> 
    <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" /> 
    <Connector SSLEnabled="true" acceptCount="100" clientAuth="false"
        disableUploadTimeout="true" enableLookups="false" maxThreads="25"
        port="9444" keystoreFile="E:/test/test/SSL/server/tomcat.keystore" keystorePass="47ecf14f-7da6-4f7b-9843-1edaf1828fc6"
        protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
        secure="true" sslProtocol="TLS" />
    <Engine name="Catalina" defaultHost="localhost"> 
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/> 
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
      <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/>
    </Engine>


  </Service>
</Server>
实例请求:http://192.168.2.120:9080/
返回的就是tomcat的信息
https://192.168.2.120:9443/
返回的就是空白,信息就是 400 Bad Request
小弟第一次配置nginx,很多不清楚,请大家指正。 nginx tomcat 服务器 ssl 代理服务器
[解决办法]
配置好多,看不过来。

初步推测是:你用Nginx接收了HTTPS,转发给Tomcat后其实已经变成了HTTP,所以应该就将其发到Tomcat的HTTP端口。
[解决办法]
惭愧,只做过Apache+Tomcat关于HTTPS的,因为你这个问题曾经碰到过,所以提出推测。

所以只能提供点建议:
◎ 把https资源和http资源,分割清晰点,最好是三级域名级别分离,最差也要设法在ContextPath级别分离;
◎ https协议的处理,只到Nginx这里为止,代理转发直接为http,Tomcat不再提供https端口;这样也提升性能;


不太理解你的死循环是个啥意思。
[解决办法]
你这个需求听起来比较奇怪啊,本来是http的请求,到了tomcat要强制转为https?这完全不能带来任何安全性的好处,平白浪费性能。。。

如果是为了提升客户安全性,应该是做个自动重定向跳转(302),让浏览器重新向 https 的地址发起请求才对。

热点排行