【转】解决undertow多个https证书的web项目部署问题

http://www.jfinal.com/share/1298

运行环境:

服务器:windows server2008 r2服务器

项目:三个阿里云https证书和一个http项目

jdk:1.8

tomcat:9.0

问题:

tomcat启动一次费时费力,随便修改一个项目都要面临重启tomat的可能,实在是不胜其烦。

解决之道:

使用jfianl undertow使用不同端口管理各个项目,实在各个项目独立运行。

把大象装冰箱只需三步

  1. 首先三个https域名分别使用8443、7443、6443端口,http使用8093端口,启动项目,确保可以通过https://项目名称:端口号访问 

  2. 安装nginx 并配置nginx.conf

     

     

      1.   #A项目 config start
      2. server {
      3. listen       443 ssl;
      4. server_name  www.A.com;
      5.  
      6. ssl_certificate      rs\A.pem;
      7. ssl_certificate_key  rs\A.key;
      8.  
      9.    # ssl验证相关配置
      10. ssl_session_timeout  5m;    #缓存有效期
      11. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    #加密算法
      12. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    #安全链接可选的加密协议
      13. ssl_prefer_server_ciphers on;   #使用服务器端的首选算法
      14. location / {
      15.  proxy_pass https://www.A.com:7443;
      16. }
      17. }
      18. #实现http自动跳转到https
      19. server {  
      20. listen  80;  
      21. server_name www.A.com;      
      22. rewrite ^(.*)$  https://$host$1 permanent;  
      23. }  
      24. #A 项目 config end
      25.  
      26. #B项目 config start
      27. server {
      28. listen       443 ssl;
      29. server_name  www.B.com;
      30.  
      31.         ssl_certificate      pl\B.pem;
      32. ssl_certificate_key  pl\B.key;
      33.  
      34.        # ssl验证相关配置
      35. ssl_session_timeout  5m;    #缓存有效期
      36. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    #加密算法
      37. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    #安全链接可选的加密协议
      38. ssl_prefer_server_ciphers on;   #使用服务器端的首选算法
      39.         location / {
      40.              proxy_pass https://www.B.com:6443;
      41. }
      42. }
      43. server {  
      44. listen  80;  
      45. server_name www.B.com;      
      46. rewrite ^(.*)$  https://$host$1 permanent;  
      47. }  
      48. #B项目 config end

       

       

      1. #http项目 config start 
      2.  server {
      3.        listen   80;
      4.  
      5.         server_name  www.D.com;
      6.  
      7.         
      8.         location / {
      9.              proxy_pass http://www.D.com:8093;
      10. }
      11. }
      12. #http项目 config end

      注意:证书文件要放到nginx的conf文件夹下面使用相对路径访问,使用绝对路径可能会提示找不到的提示

      打完收工!

 

 

 

 SSL 建议配置在 nginx 上, 一来是配置方便,二来是性能最好,下面给出 jfinal.com 的 ssl 配置:
server {
listen 80;
listen 443 ssl http2;
keepalive_timeout 70;

server_name jfinal.com www.jfinal.com;
root /app/jfinal-com/webapp;

ssl_certificate cert/20200618_www.jfinal.com.pem;
ssl_certificate_key cert/20200618_www.jfinal.com.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

location 配置省略
}

简单来说就是添加一个 server 配置,其中放上监听的端口号,已经对应的域名
有关 ssl 的配置,开启就是一个 listen 443 ssl http2; 搞定,后面的 ssl_ 打头的是一些证书、算法、cache 等等配置,这些在 nginx 官网都有详细的文档

如果你要配置多个 SSL 对应多个网站的话,继承添加 server ,改改 server_name、root、location 配置即可

  

 

posted @ 2020-10-20 11:15  tc310  阅读(423)  评论(0编辑  收藏  举报