一、软件版本:html
nginx-1.15+nginx
tomcat-8.0+apache
二、先解决一个疑问:Tomcat到底需不须要配置SSL?tomcat
答案:不须要服务器
三、SSL申请session
使用腾讯云、阿里云的服务器,会更加方便申请。(申请过程略)dom
申请完之后会获得两个文件:测试
1_www.domain.com_bundle.crt 证书文件
2_www.domain.com.key 私钥文件
将这两个文件拷贝到 Nginx 服务器的 /usr/local/nginx/conf 目录下。网站
四、前提:nginx安装了ssl模块,若是没有安装,点下面的连接:阿里云
http://www.javashuo.com/article/p-rgkaoepy-cb.html
五、nginx证书部署
server { #SSL 访问端口号为 443 listen 443 ssl; #填写绑定证书的域名 server_name www.domain.com; #证书文件名称 ssl_certificate 1_www.domain.com_bundle.crt; #私钥文件名称 ssl_certificate_key 2_www.domain.com.key; ssl_session_timeout 5m; #请按照这个协议配置 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #请按照这个套件配置,配置加密套件,写法遵循 openssl 标准。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { #网站主页路径。此路径仅供参考,具体请您按照实际目录操做。 root /var/www/www.domain.com; index index.html index.htm; } }
六、部署完毕之后进行测试
./sbin/nginx -t
七、有人会出现这个问题:NGINX报错 : [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
缘由是:新版本nginx须要这样配置
#将 listen 443 ssl on #改为: listen 443 ssl
问题解决,SSL部署完毕!
八、如何在应用中取https正确的协议
问题:
request.getScheme() #老是 http,而不是实际的http或https request.isSecure() #老是false(由于老是http) request.getRemoteAddr() #老是 nginx 请求的 IP,而不是用户的IP request.getRequestURL() #老是 nginx 请求的URL 而不是用户实际请求的 URL response.sendRedirect( 相对url ) #老是重定向到 http 上 (由于认为当前是 http 请求)
解决办法:只须要分别配置一下 Nginx 和 Tomcat
(1)配置 Nginx 的转发项:
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
(2)配置Tomcat server.xml 的 Engine 模块:
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/>
问题解决!