路由器上的网站从 Http 到 Https

http: Hypertext Transfer Protocol
http 协议解决了客户端和服务器端的通信问题, 位于七层网络协议模型中的应用层, 是一个无状态的明文传输协议. 默认使用80端口, 但是可以使用其他端口.
由于使用明文传输, 所以中间人可以截获消息包, 并且修改, 然后还可以假装源, 重新发出去.

https: Hypertext Transfer Protocol Secure
https 是 http 在它的下一层使用 SSL 或 TLS 来加密, 保证传输的安全性. SSL 又分为 SSL record 协议和SSL 握手协议.

由于家里的 IP 地址的80端口被联通封了, 但是443端口是开放的, 所以使用 https 协议能避免端口非80的问题, 比如使用 https://home.tianxiaohui.comhttp://home.tianxiaohui.com:90/ 要好看一点.
既然使用 https, 那就需要证书, 证书可以自己签发, 就比如 12306现在那种, 不过每个浏览器都会弹出一个警告窗口, 告诉用户这个证书不受信任. 另外一种就是让 CA 签发一个证书, 现在能签发证书的CA 还是比较多的.

1) 对于 Windows 系列的 OS (操作系统某些时候也是需要证书的) 及 IE 浏览器 , 可以签发证书的 CA 列表: http://social.technet.microsoft.com/wiki/contents/articles/14215.windows-and-windows-phone-8-ssl-root-certificate-program-member-cas.aspx

2) 对于Mozilla Firefox 系列, 可以签发证书的 CA: http://www.mozilla.org/en-US/about/governance/policies/security-group/certs/included/

3) Apple 的 OS 及 safari: http://www.apple.com/certificateauthority/ca_program.html

4) Chrome : http://www.chromium.org/Home/chromium-security/root-ca-policy

大概浏览一下, 发现中国的 CA 只有这2家公司: http://www.cnnic.cn/ & http://www.sheca.com/ 但是发现后者签发的某些证书在ff 还是显示警告.

这些 CA 中有一家 CA 提供的 certificate 是免费的: https://www.startssl.com/ 作为个人可以申请 class1的 certificate, 是免费的.
certificate 分为 class1, class2, class3, 和 Extended Validation 这4种. 区别看这里: http://weekend.blog.163.com/blog/static/74689582012030840165/

EV 证书能在浏览器显示一个绿色的区域, 里面显示认证的公司名字之类的信息, 让用户更加信任, 当然得到的成本也比较高.

nginx 安装证书
安装比较简单, 把获取的证书的 cert 和 key, copy 到服务器的某个目录, 然后修改 nginx 配置文件, 使用443端口.

使用中的问题: 一旦使用 https, 那么原来使用百度 CDN 的 js 库, bootstrap 的库, 就不能用了, 因为 https 的文档中不能使用http 的请求, 包括那些 js, css, image, fonts文件等.

路由器上面设置 DNS Server 导致网络访问变慢

路由器上面有个设置: 可以选择使用宽带提供商默认的 DNS, 或者自己指定 DNS server, 当时听说 google 的8.8.8.8 和 4.4.4.4 比较好用, 就设置成这2个指定的了.

有时候访问 ebay 站点的时候, 发现家里特别慢, 有些页面都打不开. 后来就怀疑 ebay 和联通的宽带接入有问题. 有时候为了访问, 不得不开手机流量. 后来有一天, 发现其实页面访问变慢, 主要是页面的 js 出现问题. js 迟迟 load 不下来. 发现几个类是这个: ir.ebaystatic.com 的 URL, ping 一下, 发现大多数都是 timeout. 想想这些静态的东西, 都是有 CDN 加速的, 怎么可能这么慢呢? CDN 应该是每个运营商都有加速的才对. 查一下 ping 的这个 ip, 竟然是一个美国的 ip, 那么这个 ping 解析的 ip 地址是有问题的. 终于想到家里用的路由器上面的 DNS 使用的是 google 的 DNS 解析服务器. 改回来之后果然快很多.

解析域名的 DNS 命令: nslookup ir.ebaystatic.com 8.8.8.8 或者使用默认的试试: nslookup ir.ebaystatic.com

一个例子:
LM-SHC-00355872:~ xiatian$ nslookup facebook.com 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name: facebook.com
Address: 78.16.49.15

LM-SHC-00355872:~ xiatian$ nslookup facebook.com
Server: 192.168.1.1
Address: 192.168.1.1#53

Non-authoritative answer:
Name: facebook.com
Address: 243.185.187.39

网站转发 部分解决80端口被屏蔽问题

现在家用的宽带,一般来说80端口都是被屏蔽的(443 一般都没有被屏蔽,所以 https 还是可以用的). 所以从外部访问都要加一个其他端口,比如我的是90: http://home.tianxiaohui.com:90/blog/. 如此一来, 每次访问都要人工添加端口, 很是麻烦. 对于不熟悉的用户, 很是难解释为什么还有个端口数字在这里. 但是一旦用户进入网站之后, 他就不关心端口了, 他只需要从内部点链接. 所以关键点是用户输入网址的时候.

如何解决首次输入不需要输入端口的问题呢? 如果用户真正到达你的网站之前, 有个地方可以自动给你加上你的端口号, 那么问题就解决了. 首先你想到的是 DNS 记录文件. 在 DNS 文件中, A 记录只能是一个 IP 地址, 所以不可能加端口号. 那么 cname 呢? cname 只能是一个域名, 也不能加端口号.

但是专门有这样的网站, 自动做转发的, 他能给你中间加一个端口号. 比如 你的域名是 tianxiaohui.com. 那么你可以加一个 cname: www 指向这个转发网站提供的域名 urlMapping.exmaple.com. 那么这个转发网站可以301 指向你真正的带端口的网站. 所以当客户访问 www.tianxiaohui.com 的时候, 那么先路由到 urlMapping.example.com, 然后在301 指向带端口的: home.tianxiaohui.com:90/blog/. 所以是部分解决了80端口被屏蔽的问题.