linux version:Rocky linux 9.7
nginx version: nginx/1.20.1
mysql Ver 8.0.46 for Linux on x86_64 (MySQL Community Server - GPL)
php version:PHP 8.0.30
一、环境准备与连接
1. 使用 FinalShell 连接ecs服务器
打开 FinalShell,点击“新建 SSH 连接”
填写:名称(随意)、主机(服务器公网 IP)、端口 22、用户名
root、密码点击连接,进入终端
2. 更新系统
bash
dnf update -y
一般建议在新部署服务器时先执行一次全面更新,之后根据安全公告和实际需要定期更新。dnf update -y 中的 -y 自动确认,适合在非交互脚本中使用,但生产环境更新前最好先备份或建立快照。
二、安装 Nginx
bash
dnf install -y nginx systemctl enable nginx systemctl start nginx
验证:浏览器访问 http://服务器IP,能看到 Nginx 欢迎页即成功。
三、安装 MySQL 8.0(官方仓库)
1. 添加 MySQL Yum 仓库
bash
dnf install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
2. 安装 MySQL 服务器
bash
dnf install -y mysql-community-server
3. 启动并设置开机自启
bash
systemctl enable mysqld systemctl start mysqld
4. 获取临时密码
bash
grep 'temporary password' /var/log/mysqld.log
复制输出的临时密码。
5. 修改 root 密码
bash
mysql -u root -p
输入临时密码登录,然后执行:
sql
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的强密码'; FLUSH PRIVILEGES; EXIT;
ps:
这里改完退出MySQL模式后,可改密码策略:
1. 使用临时密码登录 MySQL
bash
mysql -u root -p
输入临时密码。
2.查看当前密码策略
sql
SHOW VARIABLES LIKE 'validate_password%';
输出类似:
text
+--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +--------------------------------------+--------+
3. 调整密码策略为最低要求(或直接禁用)
可以降低策略等级和长度要求:
sql
SET GLOBAL validate_password.policy = LOW; SET GLOBAL validate_password.length = 4; SET GLOBAL validate_password.mixed_case_count = 0; SET GLOBAL validate_password.number_count = 0; SET GLOBAL validate_password.special_char_count = 0;
policy = LOW只检查长度;length = 4允许密码长度至少 4 位,123456有 6 位,满足;将大小写、数字、特殊字符数量要求都设为 0,则不再强制包含这些字符。
注意:在 MySQL 8.0 中,变量名使用点号(
.),如validate_password.policy,而非旧版的下划线(validate_password_policy)。
4. 修改 root 密码为 123456
sql
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;
5. 验证
退出后重新登录测试:
bash
mysql -u root -p123456
6. 让设置永久生效(可选)
上述设置仅在 MySQL 运行期间有效,重启后会恢复默认。若希望永久生效,可以在 MySQL 配置文件 /etc/my.cnf 的 [mysqld] 段添加:
ini
validate_password.policy=LOW validate_password.length=4 validate_password.mixed_case_count=0 validate_password.number_count=0 validate_password.special_char_count=0
保存后重启 MySQL 服务:
bash
systemctl restart mysqld
⚠️ 安全警告
将数据库 root 密码设为 123456 极其危险,强烈不建议在生产环境使用。即使只是个人测试服务器,也建议使用复杂密码并妥善保管。如果坚持使用简单密码,请务必确保服务器防火墙和安全组已限制 MySQL 端口(3306)仅本机访问,不要对公网开放。
6. 创建 WordPress 数据库和用户
bash
mysql -u root -p
输入新密码,执行:
sql
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'wpuser'@'localhost' IDENTIFIED BY '你的数据库用户密码'; GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost'; FLUSH PRIVILEGES; EXIT;
若以后 PHP 连接 MySQL 报认证错误,可执行:
sql
ALTER USER 'wpuser'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的数据库用户密码';
四、安装 PHP 8 及扩展
bash
dnf install -y php php-fpm php-mysqlnd php-gd php-xml php-mbstring php-json php-curl php-zip php-intl systemctl enable php-fpm systemctl start php-fpm
使用 FinalShell 修改 PHP-FPM 运行用户
在 FinalShell 左侧文件管理器中,导航到
/etc/php-fpm.d/右键
www.conf,选择“编辑”找到:
text
user = apache group = apache
修改为:
text
user = nginx group = nginx
保存文件(Ctrl+S)
回到终端执行:
bash
systemctl restart php-fpm
五、配置 Nginx 虚拟主机
1. 创建站点目录
bash
mkdir -p /var/www/wordpress
2. 使用 FinalShell 创建并编辑配置文件
在 FinalShell 文件管理器中,进入
/etc/nginx/conf.d/右键空白处 → 新建文件,命名为
wordpress.conf右键该文件 → 编辑,粘贴以下内容(将
server_name改为你的域名或 IP,若没有域名写_):nginx
server { listen 80; server_name _; root /var/www/wordpress; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires max; log_not_found off; } location ~ /\.ht { deny all; } }保存文件
3. 测试并重载 Nginx
bash
nginx -t systemctl reload nginx
六、下载并配置 WordPress
1. 下载 WordPress
bash
cd /var/www/wordpress wget https://wordpress.org/latest.tar.gz tar -xzf latest.tar.gz --strip-components=1 rm -f latest.tar.gz
2. 设置权限
bash
chown -R nginx:nginx /var/www/wordpress find /var/www/wordpress -type d -exec chmod 755 {} \; find /var/www/wordpress -type f -exec chmod 644 {} \;3. 使用 FinalShell 配置 wp-config.php
1. 进入 WordPress 目录
在终端中执行:
bash
cd /var/www/wordpress
2.复制配置文件
bash
cp wp-config-sample.php wp-config.php
3. 使用 vi 编辑器修改配置文件
执行:
bash
vi wp-config.php
这时会进入 vi 编辑器,全程键盘操作。
vi 基本操作:
按
/键进入搜索模式,输入DB_NAME然后回车,光标会跳到第一个匹配处。按
n键跳转到下一个匹配项,直到定位到define( 'DB_NAME', 'database_name_here' );这一行。按
i键进入插入模式(屏幕底部会出现-- INSERT --)。使用方向键移动光标,将
'database_name_here'修改为'wordpress'。按
Esc键退出插入模式。重复上述步骤修改
DB_USER和DB_PASSWORD:搜索
DB_USER,将'username_here'改为'wpuser'。搜索
DB_PASSWORD,将'password_here'改为您的数据库用户密码(例如'你的强密码')。
同样修改
DB_HOST为'localhost'(通常默认已是,但确认一下)。按
Esc确保退出插入模式。输入
:wq然后按回车,保存并退出。
4. 替换安全密钥(可选但强烈建议)
ps:
为什么要替换?
具体作用:
加密 Cookie:当用户登录 WordPress 后,服务器会生成一个包含用户身份信息的 Cookie。这些密钥用于对该 Cookie 进行哈希和加密,确保 Cookie 无法被篡改或伪造。
防止会话劫持:如果没有这些随机密钥,攻击者可能更容易猜测或构造有效的登录 Cookie,从而冒充已登录用户。
增强密码存储安全性:虽然 WordPress 密码本身使用哈希存储,但密钥用于生成更复杂的认证令牌,间接提升了整体安全性。
为什么必须更换默认的占位符?
WordPress 默认配置文件中的密钥是空占位符(如
'put your unique phrase here'),如果保持原样,所有使用该默认配置的站点将共享相同的“密钥”,这使得攻击者可以轻易伪造 Cookie 并入侵任何未修改密钥的站点。更换为随机、唯一的密钥后,你的站点就拥有了独立的加密指纹,大幅提高安全性。
其他好处:
强制用户重新登录:如果网站曾经被入侵或怀疑 Cookie 泄露,更换密钥会使所有现有登录 Cookie 失效,用户必须重新登录,从而切断攻击者的会话。
总结:更换安全密钥是 WordPress 安全配置的基本步骤,确保你的站点使用独一无二的加密密钥,防止 Cookie 伪造和会话劫持。强烈建议在安装时或首次配置时完成这一步。
>>
您可以继续使用 vi 替换密钥,但更简单的方法是使用命令行直接生成并替换。在终端执行以下命令(会自动从 WordPress 官方获取密钥并替换到配置文件中):
bash
curl -s https://api.wordpress.org/secret-key/1.1/salt/ >> wp-config.php
但这样会把密钥追加到文件末尾,并非替换原有占位符。更好的做法是先用 vi 删除原有的密钥占位行(通常是 8 行 define('AUTH_KEY', 'put your unique phrase here'); 等),然后执行上述命令追加。或者使用 sed 命令替换,但比较复杂。简单起见,您可以手动用 vi 编辑:搜索 AUTH_KEY,逐行删除占位内容并粘贴从网页复制的新密钥。
不过既然要求全键盘,我们可以通过以下命令自动完成替换(利用 curl 和 sed):
bash
# 备份原文件 cp wp-config.php wp-config.php.bak # 下载密钥并存储到临时文件 curl -s https://api.wordpress.org/secret-key/1.1/salt/ > /tmp/salt.txt # 使用 sed 删除原有的 8 行密钥定义,并在相同位置插入新密钥 sed -i '/AUTH_KEY/d; /SECURE_AUTH_KEY/d; /LOGGED_IN_KEY/d; /NONCE_KEY/d; /AUTH_SALT/d; /SECURE_AUTH_SALT/d; /LOGGED_IN_SALT/d; /NONCE_SALT/d' wp-config.php sed -i "/define( 'DB_COLLATE', '' );/r /tmp/salt.txt" wp-config.php
以上命令会删除所有旧密钥行,并在 DB_COLLATE 行之后插入新的密钥行。完成后可查看确认:
bash
grep -E 'AUTH_KEY|SECURE_AUTH_KEY|LOGGED_IN_KEY|NONCE_KEY|AUTH_SALT|SECURE_AUTH_SALT|LOGGED_IN_SALT|NONCE_SALT' wp-config.php
5. 验证文件权限
确保配置文件的属主和权限正确:
bash
chown nginx:nginx wp-config.php chmod 640 wp-config.php
通过以上纯命令行操作,您已经完全避免了鼠标,成功配置了 wp-config.php。如果后续还需要编辑其他文件,同样可以使用 vi 或 nano(更简单的编辑器,使用 Ctrl+O 保存,Ctrl+X 退出)。
七、配置 SELinux 和防火墙
bash
# SELinux 设置 setsebool -P httpd_can_network_connect 1 setsebool -P httpd_can_network_connect_db 1 restorecon -Rv /var/www/wordpress # 防火墙开放端口 ps: 这里可能没安装防火墙:
解决方案:
1. 检查 firewalld 是否安装
bash
rpm -q firewalld
如果未安装,先安装:
bash
dnf install -y firewalld
2. 启动 firewalld 并设置开机自启
bash
systemctl start firewalld systemctl enable firewalld
3. 重新添加端口规则
bash
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
4. 验证规则
bash
firewall-cmd --list-services
应该能看到 http 和 https。
补充说明:
为什么 firewalld 没有运行? 可能在系统安装时没有启用,或者被其他防火墙工具(如 iptables)替代。Rocky Linux 9 默认使用 firewalld,但可能被禁用。
如果不想使用 firewalld,可以跳过这一步,因为阿里云安全组已经提供了网络层过滤,只要安全组放行了 80/443 端口,外部就能访问。但系统防火墙(firewalld)建议保持开启,以增加一层防护。
如果已经开启了 firewalld 但仍然无法访问,请检查阿里云安全组规则是否放行 80/443 端口。
>> firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
别忘了在阿里云控制台的安全组中放行 80 和 443 端口。
八、完成 WordPress 安装
浏览器访问 http://你的服务器IP 或域名,按照向导填写:
站点标题
管理员用户名
密码
邮箱
点击“安装 WordPress”即可。
九、后续优化建议
启用 HTTPS:使用 Certbot 申请免费 SSL 证书。
定期备份:备份数据库和网站文件。
安全加固:修改 SSH 端口、禁用密码登录、限制登录 IP 等。
现在,您的 WordPress 个人博客已成功运行在阿里云 Rocky Linux 9.7 服务器上,数据库使用 MySQL,Web 服务器使用 Nginx,PHP 采用 PHP-FPM。FinalShell 让文件编辑和命令执行变得非常便捷,祝您使用愉快!