笔者最近在开发一款微信小程序,小程序呢要求所有服务器通讯必须使用 HTTPS 协议的安全连接。这就没办法了,开发环境就得直接干到线上,域名也不能少。不过这些事情迟早也是要做的,那就干吧。
购买服务器和域名
国内的话,阿里云现在已经做的很成熟,然后也收购了万网,云主机和域名可以一站购买。需要注意的是,如果购买中国大陆的主机是需要备案的,而有些后缀的域名在国内暂时还不能备案。还有就是,不管你买哪儿的主机,域名都要实名认证后才可以使用。
1. 选择基础镜像
在选择云主机的配置时,也会要求选择基础镜像,可以选择阿里云提供的公共镜像,也可以去镜像市场的挑选第三方提供的集成运行环境。
2. 设置域名解析
域名解析也可以通过阿里云的控制台去设置,具体设置如图所示,记录值填你刚刚购买的云主机的IP地址。
安装Apache
安装PHP
安装MySQL
配置HTTPS
这里笔者选择了 Let's Encypt 颁发的免费证书,并使用 certbot 来生成证书(事实上后来我发现阿里云也提供了免费的CA证书服务)。在certbot首页选择你使用的服务器软件和操作系统会有相应的引导,这里我使用的分别是Apache和CentOS 6。
1. 下载cerbot
$ wget https://dl.eff.org/certbot-auto
$ chmod a+x certbot-auto
2. 生成证书
$ ./certbot-auto certonly --webroot -w /usr/local/apache2/htdocs/ -d www.域名
3. 配置服务器自动更新证书
Let's Encypt证书的有效期只有3个月,所以需要配置服务器自动更新证书。在/etc/crontab中添加下面的配置:
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
30 2 */2 * * /root/certbot-auto renew --quiet
31 2 */2 * * /usr/local/apache2/bin/apachectl start
4. 配置Apache加入证书
首先修改Apache的主配置文件httpd.conf,开启SSL模块,并且包含自子配置文件httpd-ssl.conf:
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
然后修改httpd-ssl.conf,可以参考 配置文件生成器 :
最后,重启Apache,就可以看到梦寐以求的小绿锁了。
$ apachectl restart