WordPress+Apache+SSL个人博客网站安装配置流程

最近几年,搜索引擎的结果被CSDN污染得很严重。不管搜索什么,CSDN都要跑出来凑热闹。明明本站有次内容也要复制一下;复制也就算了,最起码你复制完整版的,有的文章复制一半就发布出来;复制完整的都算好的了,有的文章复制完整的但是格式乱七八糟,代码没有格式化,简直无语至极。

如果你有想发布什么文章,如果可以的话,我希望阁下能尽量公开,摆脱微信公众号之类的信息茧房的约束。

以上只是个人之言,本文介绍的是个人网站从入门到放弃。

服务器

提供服务器的有好多,根据用途不同选择不同的供应商。如果你是国外的,可以考虑亚马逊、微软之类的。如果你是国内或者想连接国外可以选国内服务商的香港服务器。如果像我一样是国内用户,没有国外的需求就选国内的好了。

国内有几个巨头是绕不开的:阿里、腾讯、华为、百度等等。这些人民富豪原创达人占据了国内互联网的九成以上版图。

阿里腾讯比华为百度多提供轻量云服务器,轻量服务器相对于普通服务器比较便宜适合新手,缺点就是限制较多,比如带宽峰值为10Mb/s、最多2核8G、每月流量2000G等等。但是普通服务器只要你有钱,可以无限加(比如每增加1Mb/s带宽需要增加200块)。

以我现在使用的2核8G内存轻量服务器为例,国内操作系统免费使用,使用时间为1年。

大陆云服务器服务商价格表

类型阿里轻量阿里香港轻量阿里阿里香港腾讯轻量腾讯轻量香港腾讯腾讯香港百度百度香港华为华为香港
内核2核2核2核2核2核2核2核2核2核2核2核2核
内存8G8G8G8G8G8G8G8G8G8G8G8G
硬盘80G200G80G80G80G200G80G80G80G80G80G80G
带宽10Mbps30Mbps288/Mbps360/Mbps10Mbps30Mbps240/Mbps240/Mbps230/Mbps270/Mbps230/Mbps300/Mbps
流量2000G5TB不限量不限量2000G5TB不限量不限量不限量不限量不限量不限量
价格360/月266/月318/月(不含带宽)461/月(不含带宽)350/月266/月250/月372/月250/月400/月310/月385/月
折扣年付85折年付85折年付85折年付85折年付69折年付83折首次29折年付80折年付8折

总结:

  • 1、第一次在服务商买会有折扣,上图的百度我没买过,打2.9折,腾讯阿里第一次购买打7.5折。另外官网会有一些套餐折扣和活动,比如腾讯的双倍活动(2核8G变为4核16G,价格不变)
  • 2、第二次购买之后,就不在享受套餐价格。比如阿里云服务器套餐价799元一年,原价3500一年,套餐结束后续费为原价续费,但是应该会有优惠券之类的。
  • 3、配置按需要购买,刚开始可以1G1核这样的配置。
  • 4、使用之前最好先熟悉一下Linux的命令行使用(如果使用linux系统的话)。
  • 5、买服务器其实买的是服务商提供的公网ip,就算你要内网穿透也有公网ip对外。如果你有公网ip的话就不需要买云服务器了。
  • 6、香港服务器性价比比大陆高很多。网络可能有问题,比如说某些时候会访问不了。
  • 7、8Mbps = 1MB/s。
  • 8、首次购买的优惠最高,最好买时间长一点的(比如,先来个三年),如果需要的化。

买好服务器之后,我的阿里云服务器是

my

点击有效的服务器进入管理页面。

control

在站点设置部分我们可以绑定域名和ip,这样就可以通过域名直接访问服务器了。

url

点击添加域名,在域名编辑框填入域名就可以绑定到服务器ip了。

在阿里云搜索点击域名注册(或者直接百度域名申请,个人觉得腾讯的服务好一点,可惜已经使用阿里云了,经过阿里这段时间的骚操作,虽然很麻烦,我还是把所有的服务转移到腾讯了)

reg

填一个喜欢的域名,然后检查一下是否被注册了。使用人数较多的*.com/*.cn/比较贵而且好的都被人抢走了。

比如说我查询feater.xyz。
check

可以看到* .com 域名死贵死贵的。

点击加入清单,

add

点击立即结算

buy

购买完就可以使用了,当然了,在国内使用需要备案。

服务器购买完成后尽量不要更改之类的,信息调整很麻烦。

软件配置

SSL证书

SSL证书有多个类别,DV为普通的证书,发放速度较快,而OV为企业证书,会包含企业信息等等,发放时间较慢。我们个人网站使用DV证书。

单域名证书只能绑定一个域名,而通配符证书可以绑定同A域名下的所有证书(比如cdn.feater.top、feater.top、file.feater.top)。

显然通配符证书比较好,但是价格贵,而且免费的通配符证书有效期为3个月。免费单域名证书有效期为1年。所有证书到期后自动作废,只能申请新的证书。

本站使用的是免费的通配符证书,有效期为三个月,使用工具自动到期申请新证书。这样就相当于永久免费的通配符证书。

首先,安装必要的工具,curl用于下载,socat用于管理网络,cron用于定时启动更新证书任务

1
2
sudo apt install curl socat cron
sudo yum install curl socat cron

下载acme.sh

1
curl https://get.acme.sh | sh

运行效果为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hyper@ubuntu:~$ curl https://get.acme.sh | sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 937 0 937 0 0 421 0 --:--:-- 0:00:02 --:--:-- 421
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 204k 100 204k 0 0 268k 0 --:--:-- --:--:-- --:--:-- 267k
[Thu Mar 11 15:46:35 CST 2021] Installing from online archive.
[Thu Mar 11 15:46:35 CST 2021] Downloading https://github.com/acmesh-official/acme.sh/archive/master.tar.gz
[Thu Mar 11 15:46:47 CST 2021] Extracting master.tar.gz
[Thu Mar 11 15:46:48 CST 2021] Installing to /home/hyper/.acme.sh
[Thu Mar 11 15:46:48 CST 2021] Installed to /home/hyper/.acme.sh/acme.sh
[Thu Mar 11 15:46:48 CST 2021] Installing alias to "/home/hyper/.bashrc"
[Thu Mar 11 15:46:48 CST 2021] OK, Close and reopen your terminal to start using acme.sh
[Thu Mar 11 15:46:48 CST 2021] Installing cron job
no crontab for hyper
no crontab for hyper
[Thu Mar 11 15:46:48 CST 2021] Good, bash is found, so change the shebang to use bash as preferred.
[Thu Mar 11 15:46:48 CST 2021] OK
[Thu Mar 11 15:46:48 CST 2021] Install success!

下载的文件和生成在执行此命令的用户目录下.acme.sh文件夹内。

更新环境变量

1
source ~/.bashrc

acme可以自动配置DNS,但是需要写DNS值权限,我的是阿里云,从阿里云后台获取App_Key跟App_Secret。填入以下脚本中执行。

1
2
3
4
export Ali_Key="yourkey"
export Ali_Secret="yoursecret"

~/.acme.sh/acme.sh --issue --dns dns_ali -d feater.top -d *.feater.top

其中*.feater.top表示生成通配符证书。

输出如下:

1

生成的证书在~/.acme.sh/feater.top文件夹下,待用。

其他方法自行搜索。

Apache

安装Apache主要软件,需要的模块。配置模块信息和加载的模块。

Ubuntu的主软件为Apache2,而centOS的主软件为httpd

1
2
apache2 -m
httpd -m

需要啥,就安装啥。

1
2
3
4
5
sudo apt install apache2-ssl-dev libapache2-mod-apreq2 libapache2-mod-bw libapache2-mod-encoding \
libapache2-mod-evasive libapache2-mod-fcgid libapache2-mod-form \
libapache2-mod-geoip libapache2-mod-md libapache2-mod-mime-xattr \
libapache2-mod-parser3 libapache2-mod-php libapache2-mod-qos \
libapache2-mod-watchcat libapache2-mod-xsendfile

使用命令查看加载了哪些插件:

1
apachectl -M

样例输出为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Loaded Modules:
core_module (static)
so_module (static)
watchdog_module (static)
http_module (static)
log_config_module (static)
logio_module (static)
version_module (static)
unixd_module (static)
access_compat_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_core_module (shared)
authn_file_module (shared)
authz_core_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
filter_module (shared)
mime_module (shared)
mpm_prefork_module (shared)
negotiation_module (shared)
php7_module (shared)
reqtimeout_module (shared)
setenvif_module (shared)
status_module (shared)

如果有的模块没有自动加载,就手动加载:

1
a2enmod modulename

同样的,手动卸载为:

1
a2dismod modulename

apache模块主要使用为配置中,我的几个模块配置为:

bandwidth

用于限制访问带宽

1
2
3
4
5
6
BandWidthModule on
ForceBandWidthModule on
Bandwidth all 1048576 #1024*1024b=
MinBandwidth all -1
LargeFileLimit .avi 1 200000
LargeFileLimit .mkv 1 200000

mpm

控制并发访问

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestWorkers 250
MaxConnectionsPerChild 1000
</IfModule>

<IfModule mpm_worker_module>
StartServers 3
ServerLimit 16
MaxClients 150
MinSpareThreads 75
MaxSpareThreads 250
ThreadLimit 100
ThreadsPerChild 25
MaxRequestsPerChild 100
MaxRequestWorkers 400
MaxConnectionsPerChild 5000
</IfModule>

<IfModule mpm_event_module>
StartServers 20
ServerLimit 100
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 64
ThreadLimit 64
MaxRequestsPerChild 64
MaxRequestWorkers 400
MaxConnectionsPerChild 1000
</IfModule>

ssl

用于实现https访问

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SSLProtocol all -SSLv2 -SSLv3
SSLProxyProtocol all -SSLv3

SSLHonorCipherOrder on
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM

SSLCertificateFile /root/.acme.sh/feater.top/feater.top.cer

SSLCertificateKeyFile /root/.acme.sh/feater.top/feater.top.key

SSLCertificateChainFile /root/.acme.sh/feater.top/fullchain.cer

SSLCACertificateFile /root/.acme.sh/feater.top/ca.cer

apache还有一个文件.htaccess用于控制此网站的访问权限等等,位于网站源码的目录中。

以下代码用于伪静态。

1
2
3
4
5
6
7
8
9
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

PHP

确定PHP主程序加载的扩展。

1
php -m

安装插件

1
2
3
4
5
6
7
8
sudo apt install php-bcmath php-bz2 php-cas php-curl php-date php-db php-ds \
php-embed php-enchant php-evenement php-gd php-geoip php-imagick \
php-gmp php-gnupg php-http php-http-request2 php-igbinary \
php-imagick php-imap php-intl php-json php-ldap php-log php-mail \
php-mail-mime php-markdown php-mbstring php-memcached php-mime-type \
php-mysql php-parser php-parsedown php-soap php-snmp php-sqlite3 \
php-ssh2 php-tidy php-timer php-twig php-uuid php-validate php-xml \
php-xmlrpc php-zip php-redis php-fpm

php插件基本上不需要配置,安装并加载就可以了。

如果有的插件没有自动加载,可以在PHP配置文件夹中的php.ini文件中添加

1
extension=redis

使用命令查看加载了哪些插件。

1
php -m

样例输出为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[PHP Modules]
calendar
Core
ctype
date
exif
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
openssl
pcntl
pcre
PDO
Phar
posix
readline
Reflection
session
shmop
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
Zend OPcache
zlib

[Zend Modules]
Zend OPcache

WordPress

我的WordPress代码位置为:/var/www/html

WordPress中文网下载中文版的WordPress。解压后上传或者直接在服务器解压。

调整权限

将WordPress代码的访问权限调整为755,用户调整为www-data(Ubuntu系统下Apache用户名)。

www

然后通过网址访问https://feater.top,会自动跳转到安装界面。

index

点击现在就开始按钮

install

点击现在安装按钮

connect

设置MySQL数据库名、用户名、密码、主机名、表前缀后就按照完成。

done

最后一步是设置网站名称,用户名密码等等。就安装完成了。

导入之前的内容,在后台点击工具->导入

博客优化

网站优化,要么是修改源码、源码使用轻量级应用(typecho是轻量级博客框架,纯markdown,但是迁移太耗时间和精力)、使用插件。

我的插件有:

名称功能备注
Akismet反垃圾评论过滤垃圾评论需要申请一个key
Useso take over Google不使用google字体
W3 Total Cache页面缓存可选redis/memcached/disk
Wordfence安全网站保护登录限制、网站扫描、爬虫限制
WP Githuber MD使用markdown语法写文章
WP Statistics统计访问量
WP-PostViews显示文章浏览量
Yoast SEO文章SEO优化
博客社交分享组件文章点赞、打赏、分享
Broken Link Checker检测网站是否有失效连接