开发者社区> javen205> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

开启全站HTTPS时代-Nginx SSL+tomcat集群

简介: 目录: 1、凭证申请 Let’s Encrypt 2、Nginx支持多域名ssl证书 3、Nginx强制使用https访问(http跳转到https) 4、配置 Tomcat SSL For Free 免费 SSL 凭证申请 Let’s Encrypt 什么是Let’s Encrypt 可以看看简书上的这篇文章写得比较详细《Let’s Encrypt SSL证书配置》 文章中详细介绍了使用如何手动生成SSL证书。
+关注继续查看

目录:
1、凭证申请 Let’s Encrypt
2、Nginx支持多域名ssl证书
3、Nginx强制使用https访问(http跳转到https)
4、配置 Tomcat

SSL For Free 免费 SSL 凭证申请 Let’s Encrypt

什么是Let’s Encrypt

可以看看简书上的这篇文章写得比较详细《Let’s Encrypt SSL证书配置》

文章中详细介绍了使用如何手动生成SSL证书。但是我个人觉得还是比较麻烦,下面我来介绍一个简单的生成SSL证书方案。

使用sslforfree生成Let’s Encrypt证书

https://www.sslforfree.com

填写域名创建免费的SSL证书

下载文件上传到服务器验证并下载证书

文件上传目录

验证文件

配置好Nginx,点击第5步中的链接看看能不能访问到,如果访问正常就可以点击Download SSL Certificate 按钮下载证书了。

Nginx 主配置nginx.conf如下:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    server_tokens off;
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    include conf.d/*.conf;
}

Nginx web配置web.conf如下:

upstream tomcat {
   server 127.0.0.1:8080;
}

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;
    access_log  /home/dev/logs/nginx/web.access.log  main;

    #  error_page  500 502 503 504  /service/tomcat/nginx/504/504.html;
    location /static/{
        alias /home/dev/www/;
    }
    location ~/.well-known/{
        add_header Content-Type text/plain;
                allow all;
        root /home/dev/www/;
    }

     location / {
        proxy_redirect          off;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-For $remote_addr;
        client_max_body_size      20m;
        client_body_buffer_size 128k;
        proxy_connect_timeout   600;
        proxy_send_timeout      600;
        proxy_read_timeout      900;
        proxy_buffer_size       4k;
        proxy_buffers           4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
        proxy_pass http://tomcat;
        }
}

总结
1、相比较从服务器中命令行获取脚本部署方法简单很多,至少这边可以图形化操作,这样对于一般的用户不用担心是否影响服务器的安全和稳定性。
2、通过获取到的Let’s Encrypt SSL证书,我们可以部署到虚拟主机、VPS、服务器中,根据各种需要的WEB环境自行部署。
3、因为Let’s Encrypt证书90天有效期,我们在SSL FOR FREE注册过账户,所以到期前会提醒我们,我们需要根据提示重新续约时间和重新替换证书部署。

Nginx支持多域名ssl证书

要让nginx支持多证书,nginx必须支持TLS SNI。可以使用如下命令查看

./sbin/nginx -V 或者 /usr/local/nginx/sbin/nginx -V

查看Nginx是否支持TLS SNI

如果显示TLS SNI support disabled可以参考这篇文章进行配置

Nginx强制使用https访问(http跳转到https)

SSL FOR FREE 上下载的证书的zip包含如下内容:

下载的证书

这里我们要将ca_bundle.crt以及certificate.crt 整合到一个文件中cert_chain.crt

 cat certificate.crt ca_bundle.crt >> cert_chain.crt

整合到一个文件需要手动处理一下换行,不然启动Nginx会出现”PEM_read_bio:bad end line” 的问题

合并文件需要换行

Nginx 配置SSLhttps.conf如下:

1、指定域名80端口强制使用https
2、配置https监听

[root@localhost conf]# cat conf.d/https.conf
upstream tomcats {
   server 127.0.0.1:8088;
}

server
    {
        listen 80;
        #listen [::]:80;
        server_name ngrok.javen205.1mfy.cn static.javen205.1mfy.cn frp.javen205.1mfy.cn ijpay.javen205.1mfy.cn;

        return 301 https://$host$request_uri;
        #rewrite ^(.*)$  https://$host$1 permanent;
    }

server {
        listen 443;
        server_name  ngrok.javen205.1mfy.cn static.javen205.1mfy.cn frp.javen205.1mfy.cn ijpay.javen205.1mfy.cn;
        ssl on;
        ssl_certificate /usr/local/nginx/conf/ssl/cert_chain.crt;
        ssl_certificate_key /usr/local/nginx/conf/ssl/private.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        access_log  /home/dev/logs/nginx/https.access.log  main;

    #  error_page  500 502 503 504  /service/tomcat/nginx/504/504.html;
    location /static/{
        alias /home/dev/www/;
    }
    location ~/.well-known/{
        add_header Content-Type text/plain;
                allow all;
        root /home/dev/www/;
    }

     location / {
        proxy_redirect          off;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-For $remote_addr;
        client_max_body_size      20m;
        client_body_buffer_size 128k;
        proxy_connect_timeout   600;
        proxy_send_timeout      600;
        proxy_read_timeout      900;
        proxy_buffer_size       4k;
        proxy_buffers           4 32k;
        proxy_busy_buffers_size 64k;
        proxy_temp_file_write_size 64k;
        proxy_pass http://tomcats;
        }
}
[root@localhost conf]#

配置Tomcat

配置Tomcat server.xml 的 Engine 模块下配置一个 Valve:

<Engine name="Catalina" defaultHost="localhost"> 
<Valve className="org.apache.catalina.valves.RemoteIpValve" 
remoteIpHeader="X-Forwarded-For" 
protocolHeader="X-Forwarded-Proto" 
protocolHeaderHttpsValue="https" httpsServerPort="8088"/>  #非80端口时,必须增加httpsServerPort配置,不然request.getServerPort()方法返回 443. 
</Engine>

在Tomcat的webapps/ROOT目录下添加test.html测试如下图:
image.png

参考资料
Installing a certificate on Nginx
Nginx支持多域名ssl证书
解决配置SSL证书出现”PEM_read_bio:bad end line”问题
Nginx+Tomcat+HTTPS 配置不需要在 Tomcat 上启用 SSL 支持

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群
最近同学出去面试经常会被问到一个问题。 面试官:你说你们公司使用nginx反向代理tornado,部署了多少多少台机器,好像很牛逼的样子,但是我问你,如果主机也就是部署了nginx那台机器并发过大导致宕机了怎么办? 答曰:不考虑带宽峰值的话,比较新的 CPU 跑 nginx 单核每秒能接近 2 万请求,而且nginx如果纯做 HTTP 转发的话,Nginx 的性能高到恐怖,会挂掉很不科学。。。。 面试官:好吧,算你会忽悠,那如果插头被扫地大妈踢掉了怎么办,因为没电导致服务器宕机 答曰:阿里云机房会断电。。。你特么在逗我吧。。
0 0
ACK集群pod请求同vpc下自建nginx偶发不通
ACK集群pod请求同vpc下自建nginx偶发不通
0 0
kubeadm nginx部署k8s高可用集群 Kubernetes 1.18.14
kubeadm nginx部署k8s高可用集群 Kubernetes 1.18.14
0 0
tomcat + nginx 的 负载均衡和动静分离集群
tomcat + nginx 的 负载均衡和动静分离集群
0 0
nacos集群+nginx+mysql持久化搭建
nacos集群+nginx+mysql持久化搭建
0 0
Keepalived+LVS+nginx搭建nginx高可用集群
  nginx是一款非常优秀的反向代理工具,支持请求分发,负载均衡,以及缓存等等非常实用的功能。在请求处理上,nginx采用的是epoll模型,这是一种基于事件监听的模型,因而其具备非常高效的请求处理效率,单机并发能力能够达到上百万。nginx接收到的请求可以通过负载均衡策略分发到其下一级的应用服务器,这些服务器一般是以集群方式部署的,因而在性能不足的情况下,应用服务器可以通过加机器的方式扩展流量。此时,对于一些特大型的网站,性能的瓶颈就来自于nginx了,因为单机的nginx的并发能力是有上限的,而nginx本身是不支持集群模式的,因而此时对nginx的横向扩展就显得尤为重要。
0 0
Nginx & Tomcat - 集群搭建(Linux / Mac / Win)
Nginx & Tomcat - 集群搭建(Linux / Mac / Win)
0 0
Nginx & Tomcat - 集群简介
Nginx & Tomcat - 集群简介
0 0
云原生部署Nacos集群和Nginx集群(下)
云原生部署Nacos集群和Nginx集群(下)
0 0
+关注
javen205
一线互联网公司Android以及Java开发工程师,有多年的海外以及国内支付项目经验,热爱技术分享。 1、让支付触手可及 https://gitee.com/javen205/IJPay 2、微信指南 https://gitee.com/javen205/weixin_guide
文章
问答
文章排行榜
最热
最新
相关电子书
更多
《Nginx 代理系统常用手册》
立即下载
CentOS Nginx PHP JAVA 多语言镜像使用手
立即下载
CentOS Nginx PHP JAVA多语言镜像使用手册
立即下载