前言
最近阿里云的备案是终于终于下来了,于是乎高高兴兴地把服务器绑定了域名。但是一个周末过去了,用站长工具一查,泥煤的百度硬是一个页面没收录我的。和同学抱怨了这个事情,他让我整一套https来试一下,毕竟http存在被抓包篡改数据的风险。嘛,也不知道这个是不是百度收录的判定标准,上午整的时候也遇到了一些坑,就记录下来。
环境
- 服务器:阿里云ECS
- web容器: nginx
- 系统:CentOS 7
基本步骤
申请SSL
- 阿里云申请SSL很简单,直接跑到工作台—>服务与产品—>SSL证书
- 进入证书管理界面后点击“购买证书”,如下图所示,选择免费型DV SSL
- 申请大概需要5-10分钟左右,随时注意短信邮件,成功后如下图
- 点击下载,选择对应自己服务器上的web容器,以下以nginx为例,下载完后解压缩包会有两个文件,一个密钥一个解密的。
配置nginx
备注:打开443端口,打开443端口,打开443端口!重要的事情说三遍,之前我就是因为在阿里云的安全组里没有开启443端口,一直访问不了,至于怎么打开这里就不多阐述了。
把上一步下载得到的pem和key文件传输到服务器
vim编辑nginx配置文件,拉到最下面有个 #HTTP server注释字样,配置
1 | server { |
- server_name: 服务器地址
- root:网站根目录
- index: 入口类
- ssl:开启ssl配置
- ssl_certificate:pem文件存放目录
- ssl_certificate_key:key文件存放目录
搜索引擎优化
2015 年 5 月 25 日,百度发公告声明已全面支持 HTTPS 网页的收录,使用 HTTPS 的网页被认为更安全,所以在排名上会被优先。 百度还推荐使用 301 重定向,把网站的 HTTP 重定向到 HTTPS 。
NGINX 配置使用 301 重定向:
1 | server { |
OK,重启nginx即可重新访问即可看到效果
遇到的坑
nginx:[emerg]unknown directive ssl错误
这是我遇到的第一个坑,在我更新完nginx配置,重启的时候给我报出来,识别不了配置文件中的‘ssl’指令。百度了一下说是因为我们配置这个SSL证书需要引用到nginx的中SSL这模块,然而我们一开始编译的Nginx的时候并没有把SSL模块一起编译进去,所以导致这个错误的出现。
解决步骤
- 开始我以为是要重新安装nginx并编译,但是如果你还能找到nginx当初的安装目录就不用。如下图,我的安装目录当时是和nginx执行目录在一起的,/usr/local/nginx/nginx-1.13.7
1 | cd /usr/local/nginx/nginx-1.13.7 |
- 来到解压目录后重新添加ssl模块
1 | ./configure --with-http_ssl_module |
- make编译【注意不要make install,不然你nginx会被重新覆盖掉】
- OK,编译时间在半分钟左右,这个时候你会发现当前安装目录下多了一个objs文件夹,这个文件夹下面有一个nginx程序,这个就是新版本的程序了。
- 安全起见我们可以把之前的nginx先备份一下,然后把新的程序复制过去覆盖之前的即可
1 | 备份: cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak |
- 现在我们可以看看ssl模块是否安装成功
1 | cd /usr/local/nginx/sbin |
如上图,说明安装ssl模块成功了
ok,重启nginx就可以了
no ssl_certificate
同样是reload的时候出现nginx: [emerg] no “ssl_certificate” is defined for the “ssl” directive in /usr/local/nginx/conf/nginx.conf:102 这种错误。
泥煤的,当时就在想,我特么ssl相关的东西都给你配置好了,ssl指令都没问题,你特么一个指定密钥地址的玩意还有问题? 这个问题整了我一个多小时,最后发现是配置文件里面这里写丢了一个分号,我真是@!%!@¥#@#@¥@!
总结
哎,这个东西就因为最后遇到那个分号没有写,足足折腾了我一上午的时间,真的是要细心啊!存粹是自己坑自己