zoukankan      html  css  js  c++  java
  • SpringBoot + Nginx 配置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"
    1
    配置80端口没有转发到443,仍旧以http访问。
    总之,配置的时候会出现很多意想不到的问题,还是需要耐心,并且遇到问题不要慌,仔细查看错误提示,然后上网查询,基本你遇到的问题,网上都已经有了各种各样的解答,那就需要从中筛选自己需要的解决方案。
    祝所有人都有一次配置成功。
    ---------------------
    版权声明:本文为CSDN博主「已经死去的猫」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/fenglin0429/article/details/81347634

  • 相关阅读:
    Android 废弃方法属性解决
    Android RecycleView分组
    Android 第三方库FlycoTabLayout
    Android 自定义dialog出现的位置
    Android 底部弹窗实现
    Android 自定义设置布局
    Android 微信、qq分享文本 (Intent)
    SpringBoot关于跨域的三种解决方案
    记录一次通用Mapper+自定义mapper出现的问题分析以及排查
    IDEA配置Maven+新建Maven项目
  • 原文地址:https://www.cnblogs.com/cyl048/p/11305144.html
Copyright © 2011-2022 走看看