这两天捣鼓了一个网站,暂时托管在阿里云虚机,最低配置的那种,其实是空间免费两年,加上100G的CDN流量。访问速度还不错,练手可以,做实际的项目不推荐了。用FTP传个150k的文件传了三次都失败,只能压缩了再传上去解压,也是醉了。

折腾一番之后,网站的数据和文件总算被搬上去了,http://lilian.cellmean.com

然后发现一个问题,浏览器访问网站会被加入一段广告弹窗。

IMG_7577

试过改DNS,没用, 是运营商的线路劫持。它们在http响应的body直接插了这么一段。

QQ20160722-1@2x

非常恶劣,PC访问很容易通过改hosts表或者浏览器去广告扩展修改,用手机访问,尤其使用后台编辑时,简直不能忍。

 

只好使用ssl加密了,之前也在startssl做过主域名的ssl证书,感觉还可以,免费证书可以使用一年。现在有了更多的选择,比如LetsEncrypt或者国内一些厂商也提供了免费的ssl证书服务,操作也日趋简单化了。

还是以startssl为例。

  1. 打开主页,选择证书验证(这点可能很奇怪,他不是用用户名和密码验证的),如果没注册先注册一个用户。后面会给你一个证书,这个是专门用来登录网站的。
    QQ20160722-3@2x
  2. 验证成功后就进入控制面板,选择 “Certificate Wizard”面板,如果没有验证过域名的所有权,请选择Validations Wizard,不过你需要首先准备一个以这个域名为后缀,特定用户名的邮箱,比如webmaster@你的域名,postmaster@你的域名之类的都可以,这个也简单,国内可以申请一个阿里云或腾讯的企业邮箱即可。 我们的证书用于web服务器,在Certificate Wizard下选择Web Server SSL/TLS Certificate。点击continue.
    QQ20160722-4@2x
  3. 在跳转后的页面输入你的域名。在“Please submit your Certificate Signing Request (CSR):”选择 “Generated by Myself   (.cer PEM format certificate)” ,这个供使用Linux或者 OSX 用户使用。我们来生成一个CSR,打开终端,输入以下命令:
    openssl genrsa -out lilian.cellmean.com-privkey.pem 2048
    openssl req -new -key lilian.cellmean.com-privkey.pem -out lilian.cellmean.com.csr

    输入第二条命令之后会出现一系列的问题, 可以随便填或者直接回车。然后就生成了一个.cer的文件,拷贝内容扔到输入框, submit。
    QQ20160722-6@2x
    这样证书就生成好了,你可以选择现在下载,或者随时到Toolbox下载.
    QQ20160722-7@2x

     

证书做好了之后,我们把它配置到阿里云虚机,但必须说一个很杯具的事情,就是这个云虚机其实是不支持https的。但是强制购买的CDN(虽然只有100G流量)是支持的。不过,配置上还有点特别:

  1. 访问阿里云的管理后台,进入CDN管理控制台, 域名列表->添加新域名, 源站域名选择IP, 这个IP可以在云虚机的控制台主机信息里找到。 这也是使用CDN的好处之一,可以隐藏源站IP,一定程度减少了被DDos的可能性,其他信息类似如下填写,注意这里的端口一定要使用80。因为云虚机的443端口(https默认端口)不开放,我们只能访问CDN服务器的443端口,然后由CDN服务器回源到云虚机的80端口,这样就实现https的访问,从本质上来说CDN网络节点就是一连串的反向代理服务器。
    QQ20160722-8@2x
  2. 云虚机是阿里云旗下的(收购的万网业务),很快就通过审核,或者说不用审核,毕竟自家的,如果你使用别家的服务器可能需要一段时间审核。
    QQ20160722-9@2x
  3. 点击立即配置,把https安全加速打开,打开证书配置。回到startssl的控制面板,在Tool Box下点击Certificate List,找到刚才的域名,选择右边下拉列表的”Retrieve(pem)” 下载回本地。打开并复制其内容到阿里云CDN的“证书管理”,里“证书内容”输入框。再找到刚才我们生成csr证书之前生成 lilian.cellmean.com-privkey.pem ,把它的内容也复制出来,放到“私钥”的输入框。跳转类型选择http->https,这样更利于SEO, 因为这样可以把相似或相同的内容集中到同一个url,避免了权重分散。
    QQ20160722-12@2x

 

接下来我们配置CNAME绑定,阿里云会分配CDN的域名给你,比如像我的这样,你要在DNS里更改域名的映射

QQ20160722-13@2x

我的域名使用DNSPod的服务,更改如下:

QQ20160722-14@2x

 

 

最后一步是修改站点的代码,前面说过,虽然用户通过https访问CDN服务器,但CDN服务器到源站是通过http访问的,(以WordPress为例)这样的话,呈现在最终用户的页面中里,链接的地址还是显示http开头的,比如:http://lilian.cellmean.com/about 我们需要呈现给用户的是https://lilian.cellmean.com/about 这种的url, 在WordPress也很简单,它是有一套专门的url函数,可以做一些url控制,比如rewrite等,这也是不要去硬编码url的原因, 跟踪代码可以发现,它是通过 $_SERVER[‘HTTPS’] 服务器变量判断当前环境是否为https访问,我们可以这样骗过它,在wp-config.php文件开头写入以下内容:

define(‘WP_HOME’, ‘https://’.$_SERVER[‘HTTP_HOST’]);
define(‘WP_SITEURL’, ‘https://’.$_SERVER[‘HTTP_HOST’]);
$_SERVER[‘HTTPS’] = ‘ON’;

 

这样就大功告成了,有图有真相。

QQ20160722-15@2x

- EOF -