SpringBoot + Nginx 配置HTTPS的一次经历

SpringBoot + Nginx 配置HTTPS的一次经历

HTTPS 安全加密传输势在必行。

最近公司开发了一款小程序的应用,但是小程序为了保证数据安全,强制要求使用HTTPS,然后就不得不去配置了一下。

之前在php开发的项目上配置过一次,使用的是wdcp的控制台程序,配置起来很简单,不需要自己修改参数,按照教程将证书文件放进去就OK了。

这次是Java项目,而且用了SpringBoot,他内部集成了tomcat,没找到怎么修改tomcat参数的方法,而且看了SpringBoot配置起来好像也不是很方便。

因此就折中选择了Nginx做服务器,转发到Java项目,经过以前的几个项目,对Nginx 的基本用法和配置还是了然于胸的。

第一步,安装Nginx

服务器使用的是CentOS 7的版本,因此,直接选择了Nginx 的源码安装,在Nginx官网下载了最新的安装包,开始按照教程进行安装。

 #下载后进行解压
tar -xvzf  nginx-1.12.2.tar.gz
cd nginx-1.12.2
 #执行以下命令  这一步很重要
./configure --with-http_ssl_moudle
 #如果出现关于OpenSSL的错误,请安装openssl ,然后重复之前的操作
 yum -y install openssl openssl-devel
 #进行make 安装
 make 
 make install

安装完成后可以启动Nginx进行测试,如果出现Nginx 的欢迎页面,则安装成功。

申请SSL证书

HTTPS需要SSL证书,SSL证书的申请可以在阿里云申请免费的证书。

配置SpringBoot

在SpringBoot 的application.properties文件中进行配置:

 #如果使用IDEA进行开发的话,这些参数都有提示
server.tomcat.remote_ip_header=x-forwarded-for
server.tomcat.protocol_header=x-forwarded-proto
server.tomcat.port-header=X-Forwarded-Port
server.use-forward-headers=true
server.port=8080
 #端口号不在使用80,可以改为其他的端口

配置Nginx

将申请的证书放在Nginx的安装目录下,我放在了 /usr/local/nginx/conf/cert/ 下,有两个文件,文件后缀分别为 .key和.pem

接下来在nginx.conf进行配置:

server {
        listen       80;
        server_name  xx.example.com;
        rewrite ^(.*)$ https://${server_name}$1 permanent;
        #其实应该配置到这里就可以了,将80端口的访问转发到443端口
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            proxy_pass http://xx.example.com:8080;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;

        }
}

server {
        listen       443;
        server_name  xx.example.com;
        ssl on;
        #配置证书的路径
        ssl_certificate      cert/1534768019908.pem;
        ssl_certificate_key  cert/1534768019908.key;
        #ssl_session_cache    shared:SSL:1m;
        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 / {
             #配置转发到8080端口
            proxy_pass http://xx.example.com:8080;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;
        }
    }

上面配置完成后就可以启动Nginx 了,如果没有错误的话, 现在应该是可以进行访问了。

虽然实际步骤并不多,但是对于第一次来说,也走了很多弯路,比如安装Nginx 的时候没有安装http_ssl_moudel,然后配置完了无法启动,nginx报错提示:

nginx:[emerg] unknown directive "ssl" 

配置80端口没有转发到443,仍旧以http访问。
总之,配置的时候会出现很多意想不到的问题,还是需要耐心,并且遇到问题不要慌,仔细查看错误提示,然后上网查询,基本你遇到的问题,网上都已经有了各种各样的解答,那就需要从中筛选自己需要的解决方案。
祝所有人都有一次配置成功。

文章首发于我的公众号 欢迎关注
https://mp.weixin.qq.com/s/vF-pe8n2fho1hyArO0WYog

SpringBoot + Nginx 配置HTTPS的一次经历_第1张图片

你可能感兴趣的:(Java,HTTPS,Nginx,SpringBoot)