背景

随着互联网的快速发展,网站和应用程序的安全性变得越来越重要。https 协议也起着重要的作用,可以保证用户数据传输安全,防止用户信息被窃取。那么我们如何在 nginx 上配置强制用户访问 https 呢?

前期准备

需要在云服务商申请ssl证书,对于个人网站来说,一般都可以申请到免费的ssl证书。例如腾讯云的免费ssl证书可以在下图申请。

6914574a-52ec-466c-95ad-5d77eae2b00e.png

74bb1de9-1f33-4610-bd70-1f9f2d1513c9.png

填写绑定的域名信息以及邮箱即可,然后等待通过,把申请到的证书下载下来,放到我们自己的服务器上。我们这里是用nginx做代理服务器,所以把下载的ssl证书文件放到/etc/nginx/nginx.conf目录下。

一般nginx类型的ssl证书会包含以下几个文件

  • cloud.tencent.com_bundle.crt 证书文件
  • cloud.tencent.com_bundle.pem 证书文件(可忽略该文件)
  • cloud.tencent.com.key 私钥文件
  • cloud.tencent.com.csr CSR 文件

接下来新增nginx配置如下

server {
  # SSL 默认访问端口号为 443
  listen 443 ssl; 
  # 请填写绑定证书的域名
  server_name kelen.cc; 
  # 请填写证书文件的相对路径或绝对路径
  ssl_certificate /etc/nginx/nginx.conf/cloud.tencent.com_bundle.crt; 
  # 请填写私钥文件的相对路径或绝对路径
  ssl_certificate_key /etc/nginx/nginx.conf/cloud.tencent.com.key; 
  ssl_session_timeout 5m;
  # 请按照以下协议配置
  ssl_protocols TLSv1.2 TLSv1.3; 
  # 请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
  ssl_prefer_server_ciphers on;
  location / {
    root html; 
    index  index.html index.htm;
  }
 }

新增完后重启下服务器nginx -s reload即可。

重定向到https

配置完成后,用户访问http域名还未能强制重定向到https,于是我们还需要在server的80端口配置301永久重定向到https。

server {
  listen 80;
  server_name domain.com www.domain.com; # 将domain.com替换为你的域名

  # 重定向到HTTPS
  return 301 https://$host$request_uri;
}

配置完成后重启,到浏览器刷新下看看~