该网站是如何搭建的
一、购买域名
我在腾讯云购买了erfty.com域名,并备案,花费23元。
双拼和四英文的.com域名几乎全部被注册,但五位英文字母组合的.com域名还有很大的余裕,我原本比较倾向ftyoo.com
,最终选择了erfty.com
。
二、购买云服务器
11-09下午三点,我下定决心租用阿里云ecs云服务器,花费84.97元。
实例规格 | ecs.s6-c1m2.small |
CPU&内存 | 1 核 2 GiB |
操作系统 | CentOS 7.4 64位 |
高效云盘 | 40 GiB (2120 IOPS) |
选择CentOS 7.4系统是想熟悉Linux环境,版本没有选择较新的,怕出问题无法从网上找到解决方案。
因为是做个人网站,备案很方便。9号提交备案审核,11号拿到ICP备案号。阿里云初审的时候客服打电话来核实个人信息,提醒我网站名称像人名可能通不过,可以帮我后台修改,他建议取原名的后两个字加网,特别难听,现在看来影响不大,日后重新改名备案下。
三、域名解析
把在腾讯云购买的域名DNS解析到阿里云服务器上。
我用了腾讯云的快速解析,添加@
和www
两条A记录,把域名指向服务器主机IP,一分钟配置完成。
四、部署LNMP环境
我喜欢简洁轻快的风格,Typecho博客架构是我的首选。Apache和Nginx之间选择了轻量级的Nginx,确定使用LNMP开发环境,即Linux、Nginx、Mysql、PHP。看了很多部署Web服务的教程都推荐使用宝塔面板,但我个人不喜欢这种小白式的方法,于是打算手动部署。
主要教程和参考资料是阿里云建站教程的帮助文档,CentOS 7手动部署LNMP一栏,每条操作指令都写得清清楚楚。
远程连接我选用Putty,开源免费。因为Putty的远程登陆是SSH通信,需要在阿里云实例打开22端口。在安全组策略配置一条SSH(22)入规则,授权对象0.0.0.0/0,表示允许所有访问。阿里云的快速配置规则非常方便,只要勾选+确定就行。
远程连接前先重置实例的密码,然后在Putty的IP栏键入实例公网IP,默认使用22端口和SSH连接方式,实现远程登陆实例。
之后就是完全照着帮助文档敲命令,下载、安装、配置LNMP。
最后浏览器输入公网IP
测试环境(服务器未完成备案,无法通过域名访问),连接超时。排除安装失败,怀疑配置有错误,一番操作后发现,原来犯了个低级错误,没有打开80(HTTP)端口。
安全组添加HTTP入规则后,成功访问到网站,CentOS的初始页面。
OK,至此建站大业已经完成大半!
五、安装Typecho
官网下载Typecho源码,上传到服务器。
上传工具本来想用8UFTP,后来看到一个老哥说WinSCP可以直接连接阿里云实例操作,不需要多余的配置,遂选择WinSCP。
输入IP
、用户名
、密码
,成功连接上服务器。图形化界面操作,在本地解压Typecho源码压缩包,得到一个build文件夹,把文件夹里的所有文件上传到服务器Web目录,我的网站根目录是/usr/share/nginx/html
,也就把Typecho安装到该目录下。
然后就可以浏览器访问网站安装配置Typecho了,结果当然是又报错了。
Nignx 404
访问网站显示Nginx 404的界面,看来是Nginx的配置出了问题。
vim /etc/nginx/nginx.conf
打开配置文件nginx.conf
研究,最后终于在网上找到了解决办法。
原代码
#添加下列信息,配置Nginx通过fastcgi方式处理您的PHP请求。
location ~ .php$ {
root /usr/share/nginx/html; #将/usr/share/nginx/html替换为您的网站根目录,本教程使用/usr/share/nginx/html作为网站根目录。
fastcgi_pass 127.0.0.1:9000; #Nginx通过本机的9000端口将PHP请求转发给PHP-FPM进行处理。
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params; #Nginx调用fastcgi接口处理PHP请求。
}
网页404的原因是 /etc/nginx/conf.d/http.conf 文件的 location 设置要支持 pathinfo,即将location ~ \.php$
改成 location ~ .*\.php(\/.*)*$
修改后
location ~ .*\.php(\/.*)*$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
修改完成后重启Nginx和fpm
[root@XIzhi ~]# service nginx restart
[root@XIzhi ~]# service php-fpm restart
改完代码,终于看到了Typecho配置界面,按照程序安装向导填写相关参数,创建网站管理员账户。
其间创建数据库有个小坑,默认的数据库名称typecho在服务器上是没有的,导致Typecho无法完成安装。这个问题很好解决,我在Mysql里创建了一个同名库。
[root@XIzhi ~]# mysql -u root -p;
password>
mysql> create database typecho;
完成安装,但是发现打不开文章详细内容,页内只能跳转文章首页。
于是又去网上查解法,查到问题所在:PHP这块不支持pathinfo,将 Nginx 的 PHP 段改成如下形式:
location ~ .*\.php(\/.*)*$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+?.php)(/.*)$; #添加此段
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
添加fastcgi_split_path_info ^(.+?.php)(/.*)$;
由 Nginx 设置 PATH_INFO 值。
然后重启服务使配置生效。
[root@XIzhi ~]# systemctl restart nginx
[root@XIzhi ~]# systemctl restart php-fpm
六、安装SSL证书
使用SSL证书可以让网站从 http 协议升级为 https 加密协议,随着技术发展成为大势所趋。如果保持原始的 http 浏览器会把网站标识为不安全网站,因此安装SSL证书也应该视为网站搭建的必备步骤之一。
阿里云可以0元购买SSL证书,我用的是买腾讯云域名的时候附赠的SSL证书。两者都是时限一年,需要验证审批。
首先记得放开服务器的 443 端口(https默认端口),安全组添加一条443端口入规则。
在腾讯云SSL证书管理把签发好的证书文件压缩包下载到本地,解压后看到Apache
、IIS
、Nginx
、Tomcat
几个不同环境对应的文件夹。我用的是nginx环境,对应的nginx文件夹里有.crt
和.key
两个文件。把这两个文件上传到nginx的安装目录里,我的nginx安装路径是/etc/nginx
。
然后编辑nginx配置文件nginx.conf
。
server{
listen 443 ssl; #配置HTTPS的默认访问端口号为443
server_name www.erfty.com; #证书绑定的域名
root /usr/share/nginx/html; #网站根目录
ssl_certificate 1_erfty.com_bundle.crt; #证书的文件名称
ssl_certificate_key 2_erfty.com.key; #证书的密钥文件名称
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用该协议进行配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件
ssl_prefer_server_ciphers on;
保存修改并重启nginx服务器
:wq
[root@XIzhi ~]# systemctl restart nginx
设置自动将 HTTP 的请求重定向到 HTTPS
server {
listen 80 default_server;
server_name www.erfty.com;
return 301 https://$host$request_uri;
(注意:证书安装成功后,需要在虚拟主机上配置伪静态规则,才能全站都支持HTTPS,否则只有网站的主页支持HTTPS,网站的子目录将不支持HTTPS。)
最后浏览器输入域名验证SSL证书是否安装成功,网页地址栏出现小锁标志,表示证书安装成功。