摘要:一些关于部署网站的技术知识的概述。
域名对一个网站的作用,无需多言。澄清一点,云服务器提供商和域名提供商是分离的。虽然云服务器经常向用户兜售域名,但你使用的域名不必来自云服务器提供商。反之亦然。
所谓购买域名,实际上是租赁域名一段时间的使用权(每次续约最长十年)。域名最终是由 ICANN(International Corporation for Assigned Names and Numbers)管理的。
域名的分配经手以下四个主体:ICANN 给每个TLD(顶级域名,如 .com .edu .net)分配一个 Registry(理解为注册处,如 .com 对应 Verisign)并下辖之;Registrar(字面意思是登记员,实际上是域名经销商,如 NameCheap,GoDaddy 等公司)与各个TLD的注册处谈判协商,获得大批域名的销售和控制权;最终 Registrant (域名注册人) 从域名经销商那里购买域名。
我们通常只看到以上三个环节的最后一步,即域名的零售。零售的域名通常按年收费,第一年的价格通常比续费价格低很多:如果一年的时间里网站火了,更改域名的成本就高,站长就心甘情愿负担高额续费价格。很多域名经销商提供 WHOIS privacy,即让WHOIS查询返回的结果不包含注册域名时提供的隐私信息。
控制一个域名,就是控制该域名的 DNS record。正因如此,购买域名之后,进入的控制面板一般就是用来修改 DNS record 的。
DNS record 存在于全世界的 DNS 服务器中,它规定了指向该域名的请求该如何处理。改写其规则,可以让域名发挥出很多作用。由于指向子域名的请求要首先经过主域名,所以主域名的 DNS record 可以规定子域名如何处理。(如 info.example.com 是 example.com 的子域名)
创建 A record,可以把请求指引到某个 IP 地址。这是最常用的操作,把对域名的访问指引到某个云服务器上,依此把网站和域名关联起来。
创建 CNAME record,可以把请求 redirect 到另一个域名。访问"世界一流大学.com"之类的域名,却被重定向到某学校的官网,这个恶作剧就是通过购买相应的域名并创建 CNAME record 实现的。
最后,有些域名的控制面板允许你转发邮件,例如你拥有了 example.com 的域名,则你可以设置将发给 “<任意字段>@example.com” 的邮件转发给你设定的邮箱收件地址。不过,想要设置从该域名发信,就相对更困难了。不管怎样,这提供了一个匿名收信的渠道。任意字段>
如果你不是技术人员但也想搭建个人博客,可以考虑使用各大云服务器厂商提供的轻量应用服务器,上面安装了开箱即用的 WordPress。
如果你选择从通用的服务器开始配置环境,以 WordPress 为例,过程与在本地配置环境差不多。举一个例子:下载并安装 Apache、PHP、PHP的sql extension、MySQL 或 MariaDB(MySQL 的开源分支,两者基本可以互相替代)。启动 MySQL 服务并为 WordPress 应用创建用户、密码和表。将 WordPress 解压后的文件放到 Apache 的 root directory 下,启动 Apache 服务。
让网站支持 HTTPS 传输协议,用户和网站之间的通信才更安全,防御监听和干扰。HTTPS 协议本质上就是用 SSL/TLS 来加密数据包。以 Apache 服务器为例,要让它处理使用 HTTPS 协议的请求,就需要安装 mod_ssl 模块。Nginx 同理。
然而,这还不够,HTTPS 协议的工作要求服务器安装有效的 TLS 证书。事实上,如果服务器没有提供证书或者提供了无效的证书,大部分的浏览器会发出警告(不安全 / 无效证书)。只有服务器上证书的签发机构(CA)在浏览器预置的“受信任的证书颁发机构列表”中,浏览器才会认为这证书是有效的,从而信任连接。
这么看来,必须向一家受信任的 CA 索要 TLS 证书。在众多受信任的 CA 中,Let’s Encrypt 为了推广 HTTPS 协议的使用,免费颁发 TLS 证书,甚至只需要在服务器上运行一个认证程序就可以自动生成证书,它颁发的证书最容易获取。
在服务器端下载并运行一个 Let’s Encrypt 委托 EFF 提供的名为 certbot 的脚本,脚本会自动验证域名是否会解析到当前服务器(因此域名控制台中 A record 要提前设置好),一旦证实当前服务器确实被授权处理域名的请求,则颁发一个域名对应的证书。将该证书安装到当前服务器上,服务器就支持 https 了。
注意,如果你的服务器没有被绑定到域名,certbot 会拒绝给你的服务器提供 TLS 证书。这时,可以使用 OpenSSL 等工具自行签署一个证书,得到 self-signed certificate。浏览器仍然会对这类证书发出警告(认为是无效的证书),然而由于证书是你亲自生成的,你可以信任这个证书,忽略浏览器的警告。如果你要允许你的网站被公开访问,那还是最好配置一个域名吧,IP 地址裸奔的网站一般被认为是不可接受的。
现在的域名提供商或云服务器厂商通常会提供域名-云服务器-HTTPS的一条龙解决方案,不需要技术知识也可以按照提示走完一系列流程,部署网站。会部署网站已经不是技术人员的竞争力所在了,因此学习这些技术不要带有功利的目的,不要浅尝辄止,要有深入钻研的精神。