Nginx+SpringBoot配置SSL证书,实现https访问

从http到https需要申请ssl证书。

阿里云有免费的ssl证书,买了一个测试。

步骤

我的环境为nginx+springboot。springboot中不配置ssl,只需要配置nginx即可。

  1. 首先,在服务器控制台打开443端口。默认的网站都是80端口,https默认为443端口
  2. 在域名控制台建好用来测试的二级域名,用一级域名当然也可以。
  3. 申请ssl证书,验证的时候,按照网站提示的要求,在域名那里填相应的记录就好。
  4. ssh连接到服务器,配置nginx.conf文件。
  5. 测试配置文件nginx.conf是否正确。/usr/local/nginx/sbin/nginx -t (nginx安装的目录/sbin/nginx -t)。
  6. 当填写完,测试过,没有错误信息的时候,重启nginx。/usr/local/nginx/sbin/nginx -s reload

一些错误

  1. nginx 报错 : [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead

因为nginx 1.15 及以后的版本,不需要再写 ssl on; 了。需要把ssl on 改为listen 443 ssl;

如果还不行,那就是服务器的443端口没有打开。

  1. 配置文件中不要直接复制百度到的。出现这个错误,nginx: [emerg] unknown directive " " in /usr/local/nginx/conf/nginx.conf,是因为复制到的空格的原因。需要删除空格重新写。

源码

贴上我的https的部分的配置文件(每个二级域名都需要一个这种配置):

# http -> Https 如果使用的http协议访问,重定向到https访问
server {
    listen         80;
    server_name    xxx.xxx; # 域名
    add_header Strict-Transport-Security max-age=15768000;
    return 301 https://$server_name$request_uri;
}
# Https 的配置,除了有注释的地方,其他地方和我一样即可
server {
    listen 443 ssl; # 老版本是ssl on;较新的为listen 443 ssl;
    server_name xxx.xxx; # 域名
    
    keepalive_timeout 10m;
    ssl_certificate      cert/xxx.xxx.pem; # 申请的证书,把证书和秘钥上传到nginx.conf的同级目录cert的目录下
    ssl_certificate_key  cert/xxx.xxx.key; # 秘钥
    ssl_session_timeout 24h;
    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 / {
            proxy_pass http://127.0.0.1:8080; # 反向代理到本机的8080端口,8080端口的那个服务器不需要任何关于https的配置。
            proxy_redirect off;
            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;
        }
}
posted @ 2020-03-09 19:54  HanJunOvO  阅读(4014)  评论(0编辑  收藏  举报