开启全站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证书。但是我个人觉得还是比较麻烦,下面我来介绍一个简单的生成SSL证书方案。

使用sslforfree生成Let’s Encrypt证书

https://www.sslforfree.com

配置好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

如果显示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测试如下图:

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

时间: 2024-07-29 11:33:41

开启全站HTTPS时代-Nginx SSL+tomcat集群的相关文章

nginx 与 tomcat 集群 一二事 (0) - 简单介绍

最近看了nginx以及tomcat的集群,通俗的做一下简单总结吧 nginx 是一个http服务器,是由俄罗斯人发明的,目前主流的服务器,作为负载均衡服务器,性能非常好,最高支持5万个并发连接数,在淘宝被广泛使用(据说被淘宝的工程师优化到单机200万的并发,非常的厉害) 单个tomcat最大支持的用户并发量默认是150,在测试过程中250左右开始会有性能的问题 举个栗子,有3台tomcat,有N多请求同时经过nginx的时候,nginx作为一个路由,把请求分别分发给这3台tomcat,以此减少t

Nginx+Memcached+Tomcat集群配置

https://github.com/magro/memcached-session-manager   http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfigurationhttp://wenku.baidu.com/link?url=h-alwoByq5fqUpIVEO1v0CQ61CvF0nCxQGaXKf-N3qAVtJHfvUMBKb6k3WlfDciQRjWrpA8JoHtlO_a1LhsWTD7m

nginx反向代理-nginx+tomcat集群下的压力测试

问题描述 nginx+tomcat集群下的压力测试 我现在在单机下尝试模拟nginx+tomcat集群的配置,开了3台虚拟机,1台作nginx服务器另外两台作tomcat服务器. tomcat下的也设置了maxThreads和timeOut的值. nginx配的是将所有请求全部转发给后端的两台tomcat. 最后再装了nginx的虚拟机上用ab进行压力测试,在 -n 10000 -c 1500的时候 去测试192.168.171.134:18082没有问题,而测用127.0.0.1测nginx的

nginx+tomcat集群负载均衡中的多虚拟主机配置

虽然夜深了,但是还是解决了这个困扰我一个晚上的问题,记录下来备查. 接着我前不久写的这一篇来的:Linux下nginx和tomcat的整合http://hi.baidu.com/gnaiqeh/blog/item/2f43dac9e98d781a7f3e6fc7.html 举个例子,现在是这样的情况:我现在有a.b.c三个不同的应用,每个Tomcat集群机(一共3个)上都建立了这三个应用的虚拟主机,我要把这三个应用用一个nginx来负载均衡. 中间测试了很多次,失败的过程就不多说了,直接说最终解

Nginx+Tomcat7+Memcached实现tomcat集群和session共享问题

问题描述 由于最近项目要升级进行负载均衡,网上看了很多文章,确定还是用Nginx+Tomcat+Memcached实现tomcat集群和session共享这种方式来实现.经过网上一些配置参考Demo版本成功了.session也共享成功.在满心欢喜的情况下,还以为这么快就搞定了.事实不既然,我把我们web项目部署进去,结果出现很多问题.想必这些问题过来人肯定遇到过.问题如下:1.2个tomcat7单独启动,项目部署进去,都可以登录进去并运行.这是我的配置Memcached在tomcat7/conf

通向架构师的道路(第五天)之tomcat集群-群猫乱舞

一.为何要集群 单台App Server再强劲,也有其瓶劲,先来看一下下面这个真实的场景. 当时这个工程是这样的,tomcat这一段被称为web zone,里面用spring+ws,还装了一个jboss的规则引擎Guvnor5.x,全部是ws没有service layer也没有dao layer. 然后App Zone这边是weblogic,传输用的是spring rmi,然后App Zone这块全部是service layer, dao layer和数据库打交道. 用户这边用的是.net,以w

详谈tomcat集群

一.为何要集群 单台App Server再强劲,也有其瓶劲,先来看一下下面这个真实的场景. 当时这个工程是这样的,tomcat这一段被称为web zone,里面用spring+ws,还装了一个jboss的规则引擎Guvnor5.x,全部是ws没有service layer也没有dao layer. 然后App Zone这边是weblogic,传输用的是spring rmi,然后App Zone这块全部是service layer, dao layer和数据库打交道. 用户这边用的是.net,以w

linux-Linux下apache+tomcat集群失败

问题描述 Linux下apache+tomcat集群失败 我的系统版本是Centos5.4,分别根据如下两篇文章进行配置调试: 1. http://blog.csdn.net/bluishglc/article/details/6867358 2. http://wapwenku.baidu.com/view/8cfa95b265ce05087632138d?pn=4&vw=all&ssid=&from=&bd_page_type=1&uid=814367CBCBC

linux 平台 apache +tomcat 集群配置

目标:在同一台Linux服务器上安装 apache 和 两个 tomcat 的集群,tomcat解析所有页面和静态文件, apache 仅作代理,负责负载均衡.   1. 下载,安装 Apache   地址:http://mirror.bjtu.edu.cn/apache//httpd/httpd-2.2.19.tar.gz   Shell代码   cd /usr/local/src/apache2 #进入下载目录      wget http://mirror.bjtu.edu.cn/apac