告别浏览器警告,全站开启https

发布于 2020-03-21  213 次阅读


是否因为浏览器的警告而苦恼?

是否因为“不安全”三个字而烦躁?

是否因为站点安全提示而不知所措?

没有瓜西,我们只要开启了https,这些都能解决

这里博主记录了一下开启https服务的过程,和踩过的坑

web应用开启https服务:

STEP1:注册SSL证书

首先我们要准备一个域名:因为https的证书是和域名绑定的,没有域名的同学可以出门左转先注册一个域名:阿里云域名注册

然后我们需要给域名注册一个ssl证书:因为https是加密协议,我们要证明我们的站点安全,就需要一个有公信力的机构签发证书,这里我们以阿里云ssl平台为例,因为阿里云有免费版的SSL证书

阿里云控制台,搜索"SSL",找到“SSL证书”

进入SSL控制台,找到购买界面

找到“免费版(个人)DV”

完成购买(中途可能需要完善个人信息)

绑定域名,这里我绑定的是我的域名:xiabee.cn

然后在控制台我们就能看到刚刚绑定的SSL证书,

如果状态栏显示“审核中”就等待一会,审核通过后它会显示“已签发”

然后找到右手边“下载”键:

这里我们已上一篇的nginx服务器为例,所以下载nginx版本(具体版本可以自行选择)

下载下来的文件是一个压缩包,里面应该有两个文件:xxxx.pem 和 xxxx.key,分别是证书文件和私钥文件。这里我们不需要明白他们是怎么工作的,只要把它们存到对应位置就好

STEP2:修改服务器配置

上一篇(docker-compose搭建个人博客)中我们讲到,将docker文件映射到宿主机中,可以方便后期修改配置文件。这里我们直接修改nginx文件夹中的 nginx.conf,格式参照我项目中的nginx_https.conf

同时把刚刚下载好的xxxx.pem和xxxx.key上传到nginx文件夹或对应文件夹中

如果没有做映射或者服务器搭建在宿主机中,则进入容器或在宿主机中执行 ps -ef | grep nginx ,找一下这个文件在哪,然后再修改

代码详解:

server {
    listen  80 default;
    server_name ~.*;
    return 500;
}   #禁止直接ip访问

server {
  listen   80;
  server_name  domain name.com;     #这里的domain name.com换成您的域名
  return   301 https://$server_name$request_uri;
}   #强制全站使用https
  • 这里开启了80端口的两个服务,都是http服务
  • 第一个监听是检查ip地址的直接访问(default),我们把它解析到500错误上( Internal server error ),禁止别人通过ip直接访问站点
  • 第二个是监听http服务,全部重定向到https的端口中去,注意把domain name.com改成刚刚绑定的域名
  • 经博主实测,第一个服务好像并没有甚么作用,ip直接访问也给重定向到https去了......如果有大佬知道原因,欢迎讨论【www】
server {
    listen 443 ssl;
    server_name domain name.com; #这里的domain name.com换成您的域名

    root /var/www/html;
    index index.php;

    ssl_certificate ./conf.d/domain name.com;   #将domain name.pem替换成您证书的文件名。
    ssl_certificate_key ./conf.d/domain name.key;   #将domain name.key替换成您证书的密钥文件名。
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #使用此加密套件。
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   #使用该协议进行配置。
    ssl_prefer_server_ciphers on;   

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass wordpress:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}   #https服务器
  • 这是https服务器,监听443端口
  • listen 443 ssl:将ssl作为参数来监听......老版本通常会写成"listen 443; ssl on;",但是新版本建议以参数形式运行,更加规范
  • root, index:站点路径,保持默认即可
  • ssl_certificate:证书路径,注意:我们映射的是./conf.d文件夹,所以我们填写的路径应该是./conf/xxxx.pem而不是./nginx/xxxx.pem(如果是其他路径也没有关系,找到对应路径即可)
  • ssl_certificate_key:私钥路径,同上
  • 后面加密套件加密协议什么的复制粘贴即可(非阿里云用户可以找到对应的官方文档,然后复制粘贴他们的加密套件)
  • xxx_log:日志映射,将容器中的日志映射到宿主机,方便查询
  • location:路径配置

STEP 3:重启服务器

docker-compose restart重启整个web服务

或者重启nginx(宿主机中安装可以直接用systemctl,docker里面跑的建议百度一下,我也没玩过)

重启之后康康启动成功了没有,如果失败了就康康日志:docker logs xxxx #xxxx是nginx容器的ID

这里的[warn]是因为我之前直接写了ssl on......然后报错报的是我证书路径错了,找不到文件[/捂脸]

对找日志纠正错误,多尝试几次就好了

服务器成功开启之后,我们打开浏览器访问,会发现一个问题:

咦,我明明是https的服务,为什么浏览器还是报告不安全???

这里没有配图,因为我之前忘记截图了www

点开浏览器的详细信息,会发现是“图像等内容”链接不安全,意思是我们站点中存在http的链接,而且以图像链接为主

那我们直接把那些链接换成https就好了嘛

STEP 4:修改残余http链接

第一个:wp-config.php:在服务器中找到该文件并在结尾加上这两句:

/* 强制后台和登录使用 SSL */
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

第二个:数据库:进入mysql容器,mysql -u wordpress -p,进入mysql控制台 (数据库在宿主机中就直接进mysql控制台) ,替换更新:

UPDATE wp_posts SET post_content = replace(post_content,'http://xiabee.cn/wp-content/uploads','https://xiabee.cn/wp-content/uploads');
####记得把xiabee.cn换成你自己的域名......

第三个:wp站点路径

把http改成https

第四个:头像、插图等可能不在数据库中的链接

然后F12搜索一下http,哪里没改改哪里,so easy

最后的最后重启服务器,刷新网页:妈妈再也不用担心我的站点不安全辣


"May there be enough clouds, to make a beautiful sunset."