背景
随着互联网的快速发展,网站和应用程序的安全性变得越来越重要。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;}
配置完成后重启,到浏览器刷新下看看~