背景
随着互联网的快速发展,网站和应用程序的安全性变得越来越重要。https 协议也起着重要的作用,可以保证用户数据传输安全,防止用户信息被窃取。那么我们如何在 nginx 上配置强制用户访问 https 呢?
前期准备
需要在云服务商申请ssl证书,对于个人网站来说,一般都可以申请到免费的ssl证书。例如腾讯云的免费ssl证书可以在下图申请。
填写绑定的域名信息以及邮箱即可,然后等待通过,把申请到的证书下载下来,放到我们自己的服务器上。我们这里是用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;
}
配置完成后重启,到浏览器刷新下看看~