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 的地址发起请求才对。