基于 Nginx 的 HTTPS 证书配置实践

在这里插入图片描述

前往 韦世东的技术专栏 收获爬虫架构/爬虫逆向/存储引擎/消息队列/Python/Golang相关知识

HTTPS 的好处就不多说了,不过随着 Chrome 和 FireFox 在地址栏添加了明显的锁标识,甚至在用户访问网页的时候会显示

这样一来,我们就不得不给自己的站点加上 SSL 证书,否则会损失不少的访问量。

免费的证书从哪里申请

收费的 SSL 证书到处都是,如果是安全性较高(例如包含资金往来、个人敏感信息)的站点,购买收费证书会比免费证书好。如果只是个人专栏、企业官网等,可以选择国内几大云服务商(华为云、阿里云、腾讯云)提供的免费证书。

这里以腾讯云为例,登录腾讯云官网后打开 SSL 控制台,界面如下图所示:

点击申请免费证书后按照指引操作即可获得为期一年的免费 SSL 证书。申请到证书之后点击下载,下载得到的压缩包解压后会得到几个著名服务器对应的文件夹,包括 Tomcat/IIS/Apache/Nginx。这里以 Nginx 为例,文件夹下有 2 个文件:

1_weishidong.com_bundle.cert
2_weishidong.com.key

配置证书

将这 2 个文件复制到 weishidong.com 网站所在的服务器的 /etc/ssl 目录下,接着打开站点(这里是 weishidong.com 站点)对应的 Nginx 的配置文件(我的站点对应的是 weishidong.conf),调整以下 server 配置:

server {
  listen 443 ssl;
  server_name weishidong.com,www.weishidong.com;
  charset utf-8;
  ssl_certificate /etc/ssl/1_weishidong.com_bundle.crt;
  ssl_certificate_key /etc/ssl/2_weishidong.com.key;
  ssl_session_timeout 5m;  
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  ssl_prefer_server_ciphers on;

 location / {
       
        root /root/zhuanlan;
        index  index.html index.htm;
    }
 }

其中前缀为 ssl_ 的配置项可以在腾讯云官网查询到,location 项是站点配置,与证书配置无关。

配置完成之后执行 nginx -s reload 即可生效。

HTTP 自动从定向到 HTTPS

当我们配置好 SSL 证书后,希望所有以 HTTP 协议访问站点的流量都自动跳转到 HTTPS 协议,可以通过 Nginx 的 rewrite 重定向功能实现。打开站点对应的 Nginx 配置文件,在刚才的 server 同级再增加一个 server 配置:

server {
  listen 80;
  server_name weishidong.com,www.weishidong.com;
  rewrite ^ https://$http_host$request_uri? permanent;
}

配置完成后记得执行 nginx -s reload 使新配置生效。

Nginx SSL 模块开启

由于 Nginx 的安装方式或者编译选项不同,在我们配置好之后有可能会发现 HTTPS 并不生效,这时候打开 Nginx 的 errors 日志查看具体原因,例如 nginx: the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf,这是提示我们 Nginx 并未开启 ssl 模块。

如何查看呢?

执行命令 nginx -V 即可查看 Nginx 编译时指定的参数,终端显示:

configure arguments: --prefix=/usr/local/nginx  --add-module=/usr/local/nginx-module-vts

原来这里真的没有 ssl 相关模块,这就需要重新编译 Nginx(通过 rpm 等方式安装的 Nginx 并不会缺失这些基础模块,只有安装时手动编译的才有可能会缺失)。

现在需要找到 Nginx 的源码目录,在源码目录中执行:

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/usr/local/nginx-module-vts

这个命令是在原来已有模块的基础上新增 http_stub_status_module 和 http_ssl_module 模块。编译完成后执行 make 命令(记住,不要执行 make install)。接着备份现在正在运行的 nginx 可执行文件:

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

将刚才编译好的 Nginx 覆盖原来的 Nginx:

cp ./objs/nginx /usr/local/nginx/sbin/

覆盖完成后通过命令 /usr/local/nginx/sbin/nginx -V 查看覆盖结果。如果显示的内容中带有 http_stub_status_modulehttp_ssl_module 则说明重新编译成功。

执行 /usr/local/nginx/sbin/nginx -s reload 即可,一切完工。

⚠️ 如果不生效,就要考虑关停(/usr/local/nginx/sbin/nginx -s reload) Nginx 后再开启(/usr/local/nginx/sbin/nginx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值