📝 简单介绍一下 WordPress
WordPress 是全球使用最广泛的建站系统(CMS),功能强大、上手简单,既适合个人博客,也能扩展为企业官网、电商平台等。
它基于 PHP 和数据库运行,访问方式则依赖于 Web 服务程序(如 Nginx 或 Apache)。
📦 安装 WordPress 前,你需要准备哪些组件?
WordPress 本身不是一个“独立程序”,它需要依托完整的网站运行环境。你需要:
组件 | 作用简述 |
---|---|
Nginx(或 Apache) | 处理网页请求,提供 HTTP/HTTPS 服务(建议启用 SSL) |
PHP | 解析 WordPress 的后台逻辑代码 |
数据库(如 MariaDB/MySQL) | 存储文章、用户、评论等网站数据 |
邮件服务(推荐,也可以用第三方邮件服务) | 支持用户注册通知、密码重置等功能 |
Nginx、PHP、MariaDB数据库和Linux系统就构成了LNMP环境。
⚙️ 配置 WordPress 环境的基本流程
搭建支持WordPress服务器环境并不复杂,只要按照以下步骤一步步来:
- 域名解析
将你购买的域名指向服务器 IP,让访问者能通过地址找到你的网站。 - 安装软件包
安装 Nginx、PHP、数据库(如 MariaDB)、SSL 工具等核心组件。 - 申请 SSL 证书
使用 Let’s Encrypt 等服务,为你的网站开启 HTTPS 加密访问。 - 初始化数据库
使用mysql_secure_installation程序初始化数据库。 - 配置 Nginx
设置server块,重定向,SSL等,使 Nginx 能正确运行。 - 配置防火墙规则
开放必要端口(如 80、443)。 - 测试网站访问
打开浏览器,输入域名,确认是否能正常打开测试界面。
📌 以上步骤将构建出一个稳定、安全、支持 HTTPS 的 WordPress 环境。我们将逐步完成每一步操作,哪怕你是第一次搭建网站,也能轻松跟上。
配置域名解析
进入域名管理后台,添加一条A记录,主机名为www。这样用户用www.example.com
或example.com
就能访问到你的服务器了。
软件安装
安装必要的软件包
$ sudo dnf install nginx php mariadb-server
$ sudo dnf install python3 augeas-libs #后续申请ssl证书要用
申请SSL证书
🌐 什么是SSL?
SSL全称是 Secure Sockets Layer,中文叫“安全套接字层”,是一种用于加密互联网通信的技术。目前说的SSL是指它的继承者TLS1.2和TLS1.3
SSL 就像给你在互联网上传递的信息装上一把锁,确保别人看不到你传的内容,也不能偷偷篡改。
🔐 SSL的主要作用?
- 加密数据 —— 把你发的数据(用户名、密码、聊天内容)变成一堆乱码,别人截获也看不懂
- 验证身份 —— 确保你连的是“真正的”服务器,而不是一个伪装的网站(防钓鱼)
- 保证数据完整 —— 确保传输过程中数据不会被篡改
🔐 SSL的工作原理?
我们以浏览器访问一个HTTPS网站为例:你访问https://example.com
,这个过程涉及到身份验证、密钥协商、对称加密通信等多个阶段。
✅ 第 1 步:客户端发起连接(Client Hello)
浏览器(客户端)发送ClientHello
给服务器,包含:
- 支持的加密算法列表(例如RSA、ECDHE)
- 支持的TLS版本(如TLS 1.2)
- 一个随机数
ClientRandom
- 支持的压缩方式、扩展字段等
✅ 第 2 步:服务器响应(Server Hello)
服务器回应ServerHello
,内容包括:
- 选定的加密算法(比如RSA + AES + SHA256)
- 服务器的数字证书(包含公钥、公钥算法、域名、签名等)
- 一个随机数
ServerRandom
此时客户端就拿到了服务器的公钥
✅ 第 3 步:客户端验证证书合法性
浏览器会:
- 检查证书是否由受信任的CA 签发
- 检查证书是否过期、是否吊销
- 检查证书中的域名是否匹配当前网站
若验证失败,会弹出“不安全网站”警告。
✅ 第 4 步:客户端生成预主密钥(Pre-Master Secret)
- 客户端生成一个随机值:
PreMasterSecret
- 用服务器的公钥加密它,发给服务器
注意:这一步使用了“非对称加密”:客户端用公钥加密,只有服务器用私钥能解密
✅ 第 5 步:服务器解密Pre-Master Secret
- 服务器用自己的私钥解密出
PreMasterSecret
✅ 第 6 步:双方计算“主密钥”和对称加密密钥
- 使用三部分共同生成:
Master Secret = function(ClientRandom, ServerRandom, PreMasterSecret)
- 接下来,浏览器和服务器用相同的
Master Secret
生成对称加密用的密钥(比如AES)
✅ 第 7 步:开始用对称加密通信
握手完成后:
- 所有后续数据(如网页内容、表单、密码)都会用 对称加密(AES) 加密传输
- 通信变得既安全又高效
❓ SSL证书如何申请?
我们采用Let’s Encrypt的免费证书,每三个月需要续一次。
$ sudo python3 -m venv /opt/certbot/
$ ls /opt/certbot/ #这里会看到上面的命令生成了一些文件和目录。
$ sudo /opt/certbot/bin/pip install --upgrade pip
$ sudo /opt/certbot/bin/pip install certbot
$ sudo /opt/certbot/bin/pip install certbot-nginx #安装nginx插件,申请证书的同时会自动修改nginx.conf的配置。(可选)
$ sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot
$ sudo certbot certonly --standalone #standalone模式会启动一个http server,与let's encrypt通信。
在shell中输入你自己的域名,可以输入多个域名,一般来说www.example.com
和example.com
都写上。这样用户在访问你网站的时候,无论用www.example.com还是example.com都能正确获得网站的SSL证书,提高网站的可信度。
Let’s Encrypt 颁发证书的原理基于自动化的证书管理,主要使用 ACME(Automated Certificate Management Environment)协议进行身份验证和证书签发。其核心流程如下:
(1) 申请证书
你的服务器(运行 Let’s Encrypt 客户端,如certbot)会向 Let’s Encrypt 发送申请,表明希望获取某个域名的证书。
(2) 域名所有权验证
Let’s Encrypt 需要验证你对该域名的控制权。它提供两种主要的挑战方式:
- HTTP-01(最常用)
- DNS-01(适用于 Wildcard 证书)
① HTTP-01 验证
- Let’s Encrypt 服务器会要求你的服务器在 http://example.com/.well-known/acme-challenge/ 目录下放置一个特殊的 token 文件。
- Let’s Encrypt 服务器会访问 http://example.com/.well-known/acme-challenge/<token>,并检查该 token 是否正确。
- 如果 Let’s Encrypt 服务器能正确获取 token,则证明你对该域有管理权。
② DNS-01 验证(主要用于通配符证书)
- Let’s Encrypt 服务器要求你在 DNS 记录中添加一个 TXT 记录(通常以
_acme-challenge.example.com
为前缀)。 - Let’s Encrypt 服务器会查询该 TXT 记录,如果值与要求的 token 匹配,则验证成功。
(3) 证书签发
验证成功后,Let’s Encrypt 会使用其私钥为你的域名生成并签署 SSL 证书,并将其返回给你的客户端(如 certbot)。
申请到的证书位于:
/etc/letsencrypt/live/example.com/fullchain.pem #公钥
/etc/letsencrypt/live/example.com/privkey.pem #私钥
或
/etc/letsencrypt/live/www.example.com/fullchain.pem #公钥
/etc/letsencrypt/live/www.example.com/privkey.pem #私钥
具体的路径取决于申请证书时哪个域名在前面
验证一下是否证书包含了你输入的域名:
$ sudo openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -text | grep DNS:
之后配置nginx的时候将引用这些证书。
初始化数据库
shell中执行:
$ sudo mysql_secure_installation
该程序可以通过以下方式提高MariaDB的安全性:
- 为root帐户设置密码。
- 删除可从本地主机外部访问的root帐户。
- 删除anonymous-user帐户。
- 删除test数据库。
完成后启动数据库。
$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb
配置nginx
安装nginx后,其默认的配置文件位于/etc/nginx/nginx.conf
。本章中我们主要针对80 server块和443 server块进行配置。
- 80 server块配置
server_name www.example.com example.com; #当用户用http://example.com或者http://www.example.com访问你时,会加载该server块中的指令。
# Redirect all HTTP requests to HTTPS
return 301 https://$host$request_uri;
#当前几乎所有网站都要支持SSL/TLS,以提高可信度,确保通信内容不被中间人截获。该指令将所有的http流量重定向到https。
#即用户通过http://example.com访问你,会被重定向到https://example.com
- 443 server块配置
server_name www.example.com example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1.2 TLSv1.3;
完成后启动nginx。
$ sudo systemctl enable nginx
$ sudo systemctl start nginx
配置防火墙规则
防火墙规则是许多人容易忘记的步骤,很容易发生明明配置正确,却访问不了服务器的问题。导致兜兜转转一大圈才想起来原来防火墙没放行。切记切记。
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --reload
这里不用放行数据库流量,因为只有一台服务器,应用对于数据库的访问都在本地进行。
测试
现在打开浏览器访问自己的域名,会显示nginx的测试页面。检查浏览器地址栏是否是https连接。