网站使用nginx部署ssl证书开启https(开启http2)

网站部署ssl证书就是将网站的http协议转换为更加安全的https协议

步骤:
腾讯云和阿里云部署ssl证书流程基本一致

1、腾讯云申请ssl证书(可以免费申请50个,有效期一年;阿里云可以免费申请20个,有效期三个月)

2、下载证书(最好选择nginx服务器,适合大多数服务器)

3、xftp将下载的证书上传到服务器指定的目录下(这里我是上传到nginx的目录下的/usr/share/nginx/cert/xxx)

4、nginx配置对应域名的443端口,开启ssl

5、nginx监听对应域名的80端口返回301强制重定向到该域名下的ssl443端口

上述配置完后直接访问域名(比如haixtx.cn)就会跳转到配置了ssl的443端口(即https://haixtx.cn)

详细说明:

1、腾讯云申请ssl证书

登录腾讯云官网搜索SSL证书->点击我的证书->点击申请免费证书

进入申请证书页面选择免费版,然后根据提示一步一步进行(注意一个ssl证书只能对应一个域名/二级域名),在填写域名时填写自己需要绑定ssl的域名,一般情况下申请了几分钟后就会成功

2、下载证书

选择需要部署的ssl证书点击下载,选择nginx服务器

将证书下载到本地后就通过xftp登录服务器准备上传证书

3、xftp将下载的证书上传到服务器指定的目录下

ssl证书下载解压后会有下面四个文件,只需要把.key.pem两个文件上传服务器,nginx部署会用到这两个文件

服务器新建一个文件夹存放证书,我这里新建/usr/share/nginx/cert/xxx来存放上传的证书文件

4、nginx配置对应域名的443端口,开启ssl

xshell登录服务器配置nginx(前提是得下载了nginx),nginx的子配置文件存放在/etc/nginx/conf.d目录下,

在/etc/nginx/conf.d目录下创建cert.conf子配置文件配置haixtx.cn域名的ssl

我这里把博客项目的三个项目对应的域名都配置了ssl,步骤都一样,每个域名单独配置

# /etc/nginx/conf.d/cert.conf
# 配置前台项目ssl
server {
    # 服务器端口使用443,开启ssl
    listen 443 ssl http2;  #开启http2
    # 域名,多个以空格分开
    server_name  haixtx.cn www.haixtx.cn;# ssl证书地址
    ssl_certificate     /usr/share/nginx/cert/blog/haixtx.club_bundle.pem;  # pem文件的路径
    ssl_certificate_key  /usr/share/nginx/cert/blog/haixtx.club.key; # key文件的路径
  
    # ssl验证相关配置
    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 / {
        proxy_pass http://101.33.249.237:82;
    }
    #静态资源缓开启缓存
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    {
    proxy_pass http://101.33.249.237:82;
        expires 30d;
        # 图片防盗链,防止其它网站利用外链访问我们的图片,有利于节省流量
        #valid_referers none blocked server_names ~.google. ~.baidu. *.qq.com;  # 只允许本机 IP 外链引用,将百度和谷歌也加入白名单有利于 SEO
        #if ($invalid_referer){
        #    return 403;
        #}
    }
    location ~ .*.(js|css)?$
    {
    proxy_pass http://101.33.249.237:82;
        expires 12h;
    }}
# 配置后台项目ssl
server {
    # 服务器端口使用443,开启ssl
    listen 443 ssl http2; #开启http2
    # 域名,多个以空格分开
    server_name  admin.haixtx.cn;# ssl证书地址
    ssl_certificate     /usr/share/nginx/cert/admin/admin.haixtx.club_bundle.pem;  # pem文件的路径
    ssl_certificate_key  /usr/share/nginx/cert/admin/admin.haixtx.club.key; # key文件的路径# ssl验证相关配置
    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 / {
        proxy_pass http://101.33.249.237:8000;
    }
    #静态资源缓开启缓存
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    {
        # 这里同样需要反向代理,不然请求路径会是admin.haixtx.cn,会出现404
        proxy_pass http://101.33.249.237:8000;
        expires 30d;
        # 图片防盗链,防止其它网站利用外链访问我们的图片,有利于节省流量
        #valid_referers none blocked server_names ~.google. ~.baidu. *.qq.com;  # 只允许本机 IP 外链引用,将百度和谷歌也加入白名单有利于 SEO
        #if ($invalid_referer){
        #    return 403;
        #}
    }
    location ~ .*.(js|css)?$
    {
        proxy_pass http://101.33.249.237:8000;
        expires 12h;
    }}# 配置后端ssl
server {
    # 服务器端口使用443,开启ssl
    listen 443 ssl http2; #开启http2
    # 域名,多个以空格分开
    server_name  node.haixtx.cn;# ssl证书地址
    ssl_certificate     /usr/share/nginx/cert/node/node.haixtx.club_bundle.pem;  # pem文件的路径
    ssl_certificate_key  /usr/share/nginx/cert/node/node.haixtx.club.key; # key文件的路径# ssl验证相关配置
    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 / {
        proxy_pass http://101.33.249.237:3000;
    }
    #后端图片开启缓存
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    {
        proxy_pass http://101.33.249.237:3000;
        expires 30d;
    }}

上面配置完后以https访问对应域名(比如https://haixtx.cn)(443端口)就可以正常访问到项目了,但是如果直接访问haixtx.cn还是会默认跳转到http:haixtx.cn(80端口),所以下面可以在创建一个nginx子配置文件将http的80端口重定向到https的443端口

注意: https网页内不允许发送http请求,浏览器在https网页中遇到http请求会报错并阻止http请求的发送,所以需要给后端项目也配置ssl证书开启https

5、nginx监听对应域名的80端口返回301强制重定向到该域名下的ssl443端口

新建/etc/nginx/conf.d/proxy.conf子配置文件重定向http80端口到https的443端口

server{
    listen 80;
    server_name haixtx.cn;
    #反向代理前台
    location / {
        return 301 https://$server_name$request_uri;
    }
}
server{
    listen 80;
    server_name admin.haixtx.cn;
    #反向代理后台管理系统
   location / {
        return 301 https://$server_name$request_uri;
   }
}
server{
   listen 80;
    server_name node.haixtx.cn;
    #反向代理后端
   location / {
       return 301 https://$server_name$request_uri;
  }
}

上面配置完后直接访问haixtx.cn也会重定向到https://haixtx.cn,也就是几种访问方式都会跳转到配置了ssl的项目去(开启https)

至此项目部署ssl就完成了

注意: 开启http2的前提是需要开启https,即http->https->http2nginx开启http2后要重启nginx才能生效

nginx -s stop && nginx

测试HTTP2是否开启成功

  • 开启了https的域名下不能再使用http请求了,也就是说开启了https的项目中的所有http请求都需要切换为https,不然会报错
  • 如何查看网站是否开启http有两种办法:

1、谷歌浏览器f12开启:Chrome=>F12=>Network=>Tab栏右键点击=>勾选Protocol

2、谷歌浏览器f12控制台输入并运行下面的代码

(function(){
  //验证网站是否使用了http2
  if(window.chrome && typeof chrome.loadTimes === 'function') {
    var loadTimes = window.chrome.loadTimes()
    var spdy = loadTimes.wasFetchedViaSpdy
    var info = loadTimes.npnNegotiatedProtocol || loadTimes.connectionInfo
    if(spdy && /^h2/i.test(info)) {
      return console.log('本站点使用了 http2')
    }
  }
  console.warn('本站点未使用 http2')
})()
  • 28
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值