资讯专栏INFORMATION COLUMN

配置Nginx+Springboot+Qiniu+Https的一点心得

阿罗 / 1728人阅读

摘要:通过购买免费的证书购买地址详细操作请点击免费申请阿里云赛门企业级铁克证书在上面配置我们现在这里只讲解在阿里云下购买的证书进行配置,现在都有了证书,现在我们来配置。

最近项目中的网站要设置https,虽然进入软件行业6年了,配置这个还是显得信心不足,还好网上有好多网友分享的文章可以从中学习,但是有优也有劣,凭我自己的一点经验从中甄选出好一点的文章跟大家分享一下。

1、什么是Https?

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

2、如何在Nginx下设置网站的Https?

首先,你得先安装nginx,网上好多资料可以找到安装的方法,我们预设服务器环境是CentOS,安装方法请点击,这里就不敖述了。

安装好之后,我们需要数字证书,可以手动通过openssl生成,也可以购买,我这里讲解的是从阿里云服务器免费购买的证书,下面详细介绍下openssl。

2.1、openssl 简介
openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。
官网:https://www.openssl.org/source/

2.1.1、openssl 构成部分

密码算法库
密钥和证书封装管理功能
SSL通信API接口

2.1.2、openssl 用途

建立 RSA、DH、DSA key 参数
建立 X.509 证书、证书签名请求(CSR)和CRLs(证书回收列表)
计算消息摘要
使用各种 Cipher加密/解密
SSL/TLS 客户端以及服务器的测试
处理S/MIME 或者加密邮件

2.2、openssl生成自签名证书

生成 RSA 私钥和自签名证书

openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 365 -out cert.crt

req是证书请求的子命令,-newkey rsa:2048 -keyout private_key.pem 表示生成私钥(PKCS8格式),-nodes 表示私钥不加密,若不带参数将提示输入密码;
-x509表示输出证书,-days365 为有效期,此后根据提示输入证书拥有者信息;
若执行自动输入,可使用-subj选项:

openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 365 -out cert.crt -subj "/C=CN/ST=GD/L=SZ/O=vihoo/OU=dev/CN=vivo.com/emailAddress=yy@vivo.com"

使用 已有RSA 私钥生成自签名证书

openssl req -new -x509 -days 365 -key rsa_private.key -out cert.crt

-new 指生成证书请求,加上-x509 表示直接输出证书,-key 指定私钥文件,其余选项与上述命令相同。

2.3、通过aliyun购买免费的证书

购买地址

详细操作请点击免费申请阿里云 - 赛门企业级铁克 SSL 证书!

2.4、在Nginx上面配置Https

我们现在这里只讲解在阿里云下购买的证书进行配置,现在都有了证书,现在我们来配置https。我们假设你的证书是放在/usr/local/nginx/cert这个文件夹下,如下图所示就是我的证书文件,注意,我里面还嵌套了一层文件夹:qitenai.com,你们根据需要添加:

然后我们进入文件夹:cd /usr/local/nginx/conf/下运行命令:

vim nginx.conf

查看server配置:

server {

        listen       80;
        server_name  qitenai.com;
        return       301 https://www.qitenai.com$request_uri;
        location / {
            root   /data/wwwroot/dist;//注意:这个项目我是基于vuejs的SPA项目
            #index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }
      }
      ...
      include /usr/local/nginx/conf/custom/*.conf;//注意这里
      

我们现在80端口配置没问题,现在运行命令:

cd /usr/local/nginx/conf/custom/
vim qitenai.conf

得到如下结果:

server {
    listen 443;
    server_name qitenai.com;
    ssl_certificate   /usr/local/nginx/cert/qitenai.com/214474132640003.pem;//证书位置
    ssl_certificate_key  /usr/local/nginx/cert/qitenai.com/myserver.key;//证书私钥位置
    location / {
        root   /data/wwwroot/dist;//注意:这个项目我是基于vuejs的SPA项目
        #index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
}

这样我们就配置好了nginx的https,我们浏览试试:

3、如何结合Nginx配置Springboot的Https?

首先,我们在springboot下的application.properties文件里配置:

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=9090

然后,我们再来配置nginx,在配置nginx我想说的是我的springboot项目是通过nohup运行的,而且这里我写了一个自动化脚本启动springboot项目,如下 :

#!/bin/bash
port=9090
#根据端口号查询对应的pid
pid=$(netstat -nlp | grep :$port | awk "{print $7}" | awk -F"/" "{ print $1 }");

echo "pid=$pid"
#杀掉对应的进程,如果pid不存在,则不执行
if [  -n  "$pid"  ];  then
    echo "正在执行kill命令..."
    if kill  -9  $pid; then
       echo "正在执行nohup命令..."
       nohup java -jar good-learning-success.jar &
       echo "执行成功"
    fi
else
   echo "找不到pid,直接运行nohup命令"
   nohup java -jar good-learning-success.jar &
   echo "执行成功"
fi
#echo "查看端口执行情况:"
#netstat -auptl | grep 9090

再有一个,这个springboot项目我准备运行在api.qitenai.com这个二级域名下,所以我们必须要到域名服务器商处解析我们这个二级域名,具体实现网上也有好多文章,所以这里也不详细讲述,好了,我们来配置nginx吧,运行如下命令:

cd /usr/lcoal/nginx/conf/custom
vim api.qitenai.conf

如下所示 :

   server {
        listen       80;
        server_name  api.qitenai.com;
        return       301 https://api.qitenai.com$request_uri;
        location / {
                proxy_pass http://127.0.0.1:9090; #这里的端口记得改成项目对应的哦
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                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 ssl;
        server_name  api.qitenai.com;

        ssl_certificate      /usr/local/nginx/cert/api.qitenai.com/214474131840003.pem;//证书位置 
        ssl_certificate_key  /usr/local/nginx/cert/api.qitenai.com/214474131840003.key;//证书私钥公交车

        location / {
                proxy_pass http://127.0.0.1:9090; #这里的端口记得改成项目对应的哦
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                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,其实就是停止所有80端口,443端口会随着80端口的停止而停止,运行如下命令:

netstat -auntpl | grep 80
[root@iZm5e8pmxwulw6lsbfzw55Z custom]# netstat -auptln | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      15479/nginx: master
tcp        0      0 0.0.0.0:8880            0.0.0.0:*               LISTEN      13947/java
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      13694/java
tcp        0      0 127.0.0.1:8006          0.0.0.0:*               LISTEN      13694/java
tcp        0      0 127.0.0.1:8007          0.0.0.0:*               LISTEN      13947/java
tcp        0      0 0.0.0.0:8010            0.0.0.0:*               LISTEN      13947/java
tcp      391      0 47.104.57.2:43874       106.11.68.13:80         CLOSE_WAIT  22944/AliYunDunUpda
tcp      391      0 47.104.57.2:51732       106.11.68.13:80         CLOSE_WAIT  22944/AliYunDunUpda
tcp        0      0 47.104.57.2:36142       106.11.68.13:80         ESTABLISHED 22995/AliYunDun
udp        0      0 10.80.186.137:123       0.0.0.0:*                           1165/ntpd
[root@iZm5e8pmxwulw6lsbfzw55Z custom]#kill -9 15479

再运行命令:kill -9 15479之后,再次运行命令:netstat -auptln | grep 80查看还有没有80端口有没有Kill掉,如果有继续kill,如果没有,我们就运行如下命令重启nginx:

cd /usr/local/nginx/sbin
./nginx

然后打开域名https://api.qitenai.com,查看是否成功:

4、如何配置Qiniu的Https?

我们知道,注册了七牛服务后,会有个默认的域名给你访问资源文件,所以要配置https我们先换成我们的域名,这里我们设置域名为cdn.qitenai.com,之后,我们在七牛管理页面下进行配置,在配置之前我们先要上传证书,这里我们上传在阿里云里面购买的免费证书,注意:阿里云购买的证书是一个域名对应一个证书文件,所以像我这里要购买三次,这个一定要注意!!!

上传之后,我们现在来配置域名:

配置一下即可,记住,要选择我们刚刚上传的证书,最后就是配置cname了,进入你的域名服务器进入解析即可,详情请点击如何配置域名的 CNAME

这样就完成了七牛https的配置,查看效果如图:

5、问题

5.1、如何让http跳转到https?如何让http://example.com跳转到https://www.example.com
解决方法:

server {

        listen       80;
        server_name  www.qitenai.com qitenai.com;
        return       301 https://www.qitenai.com$request_uri;
        location / {
            root   /data/wwwroot/dist;
            #index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }
}
server {
    listen 443 default_server ssl;
    server_name www.qitenai.com;
    ssl_certificate   /usr/local/nginx/cert/qitenai.com/214474132640003.pem;
    ssl_certificate_key  /usr/local/nginx/cert/qitenai.com/myserver.key;
    location / {
        root   /data/wwwroot/dist;
        #index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
}
server {
    listen 443;
    server_name qitenai.com;
    return       301 https://www.qitenai.com$request_uri;
    ssl_certificate   /usr/local/nginx/cert/qitenai.com/214474132640003.pem;
    ssl_certificate_key  /usr/local/nginx/cert/qitenai.com/myserver.key;
    location / {
        root   /data/wwwroot/dist;
        #index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
}

5.2、同一个域名不同的端口没有设置https如何访问?

没有办法因为你没有设置https,所以只能通过http访问,实际上这种情况还是很多的,比如有些项目使用的nginx,有些只使用tomcat,而tomcat项目是测试的,所以没有配置https很正常。

如果你有问题可以加我的qq群向我提问:464696550
参考文章:
1、Spring Boot学习笔记-Nginx+Jar包部署项目
2、SpringBoot+Nginx+Https下redirect问题
3、Nginx + Tomcat + HTTPS 配置不需要在 Tomcat 上启用 SSL 支持
4、Nginx配置多个HTTPS域名的方法
5、使用 openssl 生成证书
6、阿里云ecs 服务器配置 nginx https
7、为nginx配置https并自签名证书
8、Nginx搭建HTTPS服务器--自签证书
9、Nginx+Https配置
10、主流数字证书都有哪些格式?
11、使用Spring Boot开发Web项目(二)之添加HTTPS支持
12、nginx https下不带www跳转www设置
13、Nginx 不带www的https域名 301跳转到带www的方法
14、Nginx服务器中HTTP 301跳转到带www的域名的方法
15、A redirect to a main site
16、Spring Boot中启动HTTPS
17、Nginx+Https配置

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39777.html

相关文章

  • Nginx + Lets'encrypt 实现HTTPS访问七牛空间资源

    摘要:如果绑定七牛云空间的域名能使用等这类免费的网址那么就完美了。然而七牛目前并不支持这类短期的免费证书。下面我教大家一种利用实现以的方式访问七牛资源的方法。七牛云空间应该已经绑定了自定义的域名,不懂如何绑定的请查看前一篇文章。 上一篇文章 为七牛云存储空间绑定自定义域名,并使用七牛云提供的免费SSL证书,将自定义加名升级为HTTPS 我们提到利用七牛的免费SSL证书,将自定义加名升级为HT...

    whidy 评论0 收藏0
  • Nginx + Lets'encrypt 实现HTTPS访问七牛空间资源

    摘要:如果绑定七牛云空间的域名能使用等这类免费的网址那么就完美了。然而七牛目前并不支持这类短期的免费证书。下面我教大家一种利用实现以的方式访问七牛资源的方法。七牛云空间应该已经绑定了自定义的域名,不懂如何绑定的请查看前一篇文章。 上一篇文章 为七牛云存储空间绑定自定义域名,并使用七牛云提供的免费SSL证书,将自定义加名升级为HTTPS 我们提到利用七牛的免费SSL证书,将自定义加名升级为HT...

    tinysun1234 评论0 收藏0
  • Python安装包的一点心

    摘要:对于的解释器,直接使用依赖包的名称,即可安装上。对应的包名,如果没有报错,说明是解释器自带的包,反之,不是解释器自带的包。如果不是解释器自带的包,则需要具体查找安装不上的具体原因,进一步解决。 在Python的学习的过程中,需要不断的写代码,查看别人的代码的运行效果。在这个过程中,我们需要不断安装程序的依赖包。 对于python2的解释器,直接使用pip install 依赖包的名称,...

    roland_reed 评论0 收藏0
  • 关于阅读技术文档的一点心

    摘要:如何更好的学习一门技术,去把它的官方文档仔细看一遍最近这段时间一有空就会去刷一会官方文档,写点感受总结一下。官方文档上的评论尤其要注意,有不少评论很有价值。 如何更好的学习一门技术,去把它的官方文档仔细看一遍 最近这段时间一有空就会去刷一会 PHP 官方文档,写点感受总结一下。 起因 我开始学习编程应该算是在大二学 C语言 课程,到了大三自学 PHP,之后用这门语言做了七八个外包项目,...

    booster 评论0 收藏0
  • 开源项目几点心,Java架构必会几大技术点

    摘要:架构必会几大技术点关于学习架构,必须会的几点技术列表项目反射技术文件处理属性文件处理线程安全机制注解设计模式代理机制基础过滤器等等几样比较实用的技术模板语言工具类大家对于几大框架望而生畏,实际上只要明白他的原理,就会触类旁通,在这里我 Java架构必会几大技术点 关于学习架构,必须会的几点技术 列表项目 java反射技术 xml文件处理 properties属性文件处理 线程安全机制...

    YancyYe 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<