在今年的早些时候百度搜索已经全面实现 https 模式,并宣称已经可以抓取 https 网页了,相比谷歌早年就已经支持 https 的抓取,百度虽然晚了一点,但是毕竟现在还是有了,站长之家上也有人探讨关于 https 模式对百度谷歌 seo 的影响,虽然还没有人给出实际测试的数据,但是百度全站 https 模式的话或多或少也能说明百度当下对 https 站点的态度吧!

然后切入主题讲一讲 Nginx 下配置网站 ssl 实现 https 模式访问的方法

第一步:服务器环境,lnmp 即 Linux+Nginx+PHP+MySQL,本文中以我的博客为例,使用的是阿里云最低档的 vps+免费的 Linux 服务器管理系统 WDCP 快速搭建的 lnmp 环境 (同类产品还有 amh 有免费版以及收费版),具体安装以及使用方法都可以在其官方论坛找到详细的操作文档。

第二步:创建你的网站,使用 lnmp 环境创建你的网站,已有网站的,确保你的程序在 lnmp 下能够正常的运行,以 WordPress 为例,lamp 跟 lnmp 下的伪静态规则是不同的,有过更换的,要记得切换。

第三步:申请免费的 ssl 证书

第四步:配置网站 ssl,找到你需要配置 ssl 的网站的 Nginx 配置文件,以 WDCP 为例配置文件在/www/wdlinux/nginx/conf/vhost/目录,将以下代码添加只网站的配置文件 server 中,同时为了方便管理,需要将你申请的 nginx 下的 ssl 证书上传到/www/wdlinux/nginx/conf/目录,不同的管理系统或者是手动配置的 lnmp 环境这个目录都是不一样的,请根据你的实际情况进行调整。

ssl on;

ssl_certificate_key /www/wdlinux/nginx/conf/pastdust.key;

ssl_certificate /www/wdlinux/nginx/conf/pastdust.crt;

因为 ssl 访问的不是传统网站的 80 端口,而是 443 端口则需要在配置文件中继续为网站添加 443 端口,为了方便不知道把以上放在配置文件的什么位置的人,以下将我网站完整的配置文件贴出,可以根据你的实际情况进行修改。

server {

listen 80;

listen 443;

server_name pastdust.com www.pastdust.com;

root /www/web/pastdust_com/public_html;

index  index.html index.php index.htm;

error_page  400 /errpage/400.html;

error_page  403 /errpage/403.html;

error_page  404 /errpage/404.html;

ssl on;

ssl_certificate_key  /www/wdlinux/nginx/conf/pastdust.key;

ssl_certificate  /www/wdlinux/nginx/conf/pastdust.crt;

location ~ .php$ {

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

include fcgi.conf;

}

include rewrite/pastdust.conf;

}

确认以上都修改无误之后,重启 nginx 基本上这个时候你的网站就能通过 ssl 访问了,但是还有一些细节问题需要调整,譬如以上网站配置文件是 http 与 https 模式并存的,还需要做一个跳转,件 http 模式的访问全部跳转到 https 模式。

第五步:网站强制访问 https 模式,以 WordPress 为例,将以下的跳转代码添加到当前网站所有使用的伪静态规则 conf 文件中,即可实现所有的 http 访问都跳转到 https 访问,并且是继承目录的,具体实现方法就是把 http 模式访问 301 重定向到 https 模式。

if ($server_port = 80) {

return 301 https://$server_name$request_uri;

}

if ($scheme = http) {

return 301 https://$server_name$request_uri;

}

error_page 497 https://$server_name$request_uri;

到这个时候,你访问你网站的某些页面的时候,以使用 chrome 浏览器为例,部分页面 https 不会显示绿色,显示的是打 X 或者是黄色,是因为你网站内部譬如 css 文件,外链图片等使用的依然是 http 模式,然后就是最后一步,全站 https 化。

第六步:全站 https 化,以 WordPress 为例,首先是修改网站主题中所有的 https 链接元素,然后在数据库中批量替换 ssl 化之前添加的图片附件,Sql 命令如下:

UPDATE wp_posts SET post_content = replace( post_content, 'http://www.weixiaoduo.com','https://www.weixiaoduo.com') ;

以上六部即可实现 lnmp 下网站 ssl 的配置,并让全站 https 模式访问,具体的关于 https 模式访问在百度 SEO 这一块的表现,需要等待一些时间的数据,因为截至到这篇文章发布位置,我也只是刚刚将博客 https 化,有需要参考最终实现效果的可以参考我的博客,所有的代码修改都是原版分享没有保留,同时欢迎大家留言探讨。