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

本文详细介绍了如何在腾讯云和阿里云上申请免费SSL证书,下载并上传至服务器,配置Nginx以实现HTTP到HTTPS的重定向,以及开启HTTP2功能的步骤。通过实例展示了如何为不同域名配置SSL和设置80端口到443端口的强制重定向。

网站部署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')
})()
### 配置 Nginx 服务器以部署 SSL 证书 在 Linux 系统上使用 Nginx 部署 SSL 证书是启用 HTTPS 加密通信的重要步骤。以下是详细的部署指南: #### 1. 准备工作 确保您已经准备好以下内容: - 有效的 SSL 证书文件(通常包括 `.crt` 文件) - 私钥文件(`.key` 文件) - 中间证书文件(可选,但推荐使用以构建完整的证书链) - Nginx 已经安装并正常运行 如果您使用的是自签名证书,则需要使用 `openssl` 工具生成证书和私钥[^4]。 ```bash sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt ``` #### 2. 上传证书文件 将 SSL 证书和私钥上传到服务器,通常建议将证书文件存储在 `/etc/nginx/ssl/` 或 `/etc/ssl/certs/` 目录中。例如: - 证书文件:`/etc/nginx/ssl/example.com.crt` - 私钥文件:`/etc/nginx/ssl/example.com.key` - 中间证书文件:`/etc/nginx/ssl/example.com.ca-bundle` #### 3. 编辑 Nginx 配置文件 打开 Nginx 的站点配置文件(如 `/etc/nginx/sites-available/default` 或 `/etc/nginx/conf.d/example_ssl.conf`),并添加或修改以下内容: ```nginx server { listen 443 ssl; server_name example.com www.example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; ssl_trusted_certificate /etc/nginx/ssl/example.com.ca-bundle; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; location / { root /usr/share/nginx/html; index index.html index.htm; } # 其他配置... } ``` 如果您使用的是国密算法(如 SM2),则需要指定国密加密套件和协议版本[^3]: ```nginx ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers SM2-SM3-SM4-ECDHE-SM2-WITH-SM3; ssl_prefer_server_ciphers on; ``` #### 4. 配置 HTTPHTTPS 重定向(可选) 为了确保所有流量都通过 HTTPS 访问,可以在 HTTP 配置中添加重定向: ```nginx server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; } ``` #### 5. 检查配置并重启 Nginx 在应用配置之前,检查 Nginx 配置是否正确: ```bash sudo nginx -t ``` 如果没有错误,重启 Nginx 服务以应用更改: ```bash sudo systemctl restart nginx ``` #### 6. 验证 SSL 证书 访问 `https://example.com`,确保浏览器显示安全锁图标。您可以使用以下在线工具验证证书的完整性和配置是否正确: - [SSL Labs SSL Test](https://www.ssllabs.com/ssltest/) #### 7. 定期更新与维护 - **证书续期**:SSL 证书通常有有效期(如 90 天),需定期更新。可使用 Let's Encrypt 等工具自动续期。 - **密钥保护**:确保私钥文件的权限设置为 `600`,并仅限 `root` 用户访问。 - **日志监控**:定期检查 Nginx 日志(如 `/var/log/nginx/error.log`)以发现潜在问题。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值