CentOS Stream 9 使用 LNMP 架构部署网站 —— 语法详解与实战案例
一、了解 LNMP 架构
1.1 LNMP 是什么?
LNMP是一套用于部署动态网站的开源 Web 服务架构组合,由以下组件组成:
| 组件 | 作用 |
|---|---|
| Linux | 操作系统(CentOS Stream 9) |
| Nginx | 高性能 Web 服务器 / 反向代理服务器 |
| MariaDB | 关系型数据库(MySQL 的开源分支) |
| PHP | 服务端脚本语言,用于动态网页处理 |
✅ 优势:
- 高并发、低内存占用(Nginx)
- 开源免费、社区活跃
- 支持 WordPress、Drupal、Laravel 等主流 CMS 和框架
1.2 Nginx 是什么?
Nginx 是轻量级、高性能的 HTTP 服务器和反向代理服务器,支持高并发连接。
- 默认端口:80(HTTP)、443(HTTPS)
- 配置文件路径:
/etc/nginx/nginx.conf - 站点配置目录:
/etc/nginx/conf.d/或/etc/nginx/sites-enabled/ - 服务管理命令:
systemctl start|stop|restart|status nginx
1.3 MySQL、MariaDB 是什么?
MariaDB是 MySQL 的一个开源分支,完全兼容 MySQL 协议和语法,由原 MySQL 作者维护。
- 默认端口:3306
- 配置文件:
/etc/my.cnf或/etc/mysql/mariadb.conf.d/ - 管理工具:
mysql命令行客户端、phpMyAdmin(可选)
1.4 PHP 是什么?
PHP(Hypertext Preprocessor)是一种广泛用于 Web 开发的服务器端脚本语言。
- 通过PHP-FPM(FastCGI Process Manager)与 Nginx 通信
- 配置文件:
/etc/php.ini、/etc/php-fpm.d/www.conf - 常用扩展:
php-mysqlnd、php-gd、php-mbstring、php-xml、php-curl
1.5 LNMP 架构工作原理
用户浏览器 ↓ HTTP 请求 Nginx(Web服务器) ↓ .php 请求 → 通过 FastCGI 协议 PHP-FPM(处理PHP脚本) ↓ 数据库查询 MariaDB(存储数据) ↑ 返回结果 PHP-FPM → Nginx → 浏览器✅ 流程说明:
- Nginx 接收用户请求
- 若请求的是
.php文件,Nginx 通过fastcgi_pass转发给 PHP-FPM- PHP-FPM 解析执行 PHP 脚本,如需数据库操作,则连接 MariaDB
- 最终结果返回给 Nginx,再返回给用户浏览器
1.6 LNMP 架构部署方式
三种主流部署方式:
| 方式 | 说明 | 适用场景 |
|---|---|---|
| YUM/DNF 安装 | 使用系统包管理器安装,简单稳定 | 生产环境推荐 |
| 源码编译安装 | 自定义模块、优化性能 | 高级用户、定制需求 |
| 一键安装脚本 | 如 LNMP.org 提供的脚本 | 快速部署、新手友好 |
✅ 本文采用DNF 安装方式(CentOS Stream 9 默认包管理器)
二、安装与配置 Nginx 服务器
2.1 安装 Nginx 软件包
# 更新系统sudodnf update -y# 安装 EPEL 仓库(提供额外软件包)sudodnfinstallepel-release -y# 安装 Nginxsudodnfinstallnginx -y# 启动并设置开机自启sudosystemctl start nginxsudosystemctlenablenginx# 防火墙放行 HTTP/HTTPSsudofirewall-cmd --permanent --add-service=httpsudofirewall-cmd --permanent --add-service=httpssudofirewall-cmd --reload# 验证安装curlhttp://localhost# 应看到 "Welcome to nginx!" 页面✅ 案例:检查 Nginx 状态和版本
# 查看服务状态systemctl status nginx# 查看版本信息nginx -v# 输出示例:nginx version: nginx/1.20.1# 测试配置文件语法sudonginx -t# 成功输出:nginx: configuration file /etc/nginx/nginx.conf test is successful2.2 熟悉 Nginx 的配置文件
主配置文件:
/etc/nginx/nginx.conf
# 全局块 user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # 事件块 events { worker_connections 1024; } # HTTP 块 http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/conf.d/*.conf; # 加载站点配置 }✅ 关键配置说明:
| 配置项 | 说明 |
|---|---|
user nginx; | Nginx 运行用户 |
worker_processes auto; | 自动设置工作进程数 |
include /etc/nginx/conf.d/*.conf; | 包含站点配置文件 |
✅ 站点配置文件模板(
/etc/nginx/conf.d/your_site.conf)
server { listen 80; server_name yourdomain.com www.yourdomain.com; root /var/www/html; index index.html index.htm index.php; location / { try_files $uri $uri/ =404; } # PHP 支持(后续章节配置) location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # 拒绝访问隐藏文件 location ~ /\. { deny all; } }✅ 案例:创建测试站点并验证
# 创建网站根目录sudomkdir-p /var/www/html/test# 创建测试页面echo"<?php phpinfo(); ?>"|sudotee/var/www/html/test/info.phpecho"Hello from Nginx!"|sudotee/var/www/html/test/index.html# 创建站点配置sudotee/etc/nginx/conf.d/test.conf<<'EOF' server { listen 80; server_name localhost; root /var/www/html/test; index index.html index.php; location / { try_files $uri $uri/ =404; } location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } EOF# 重载 Nginxsudonginx -t&&sudosystemctl reload nginx# 测试访问curlhttp://localhost/index.htmlcurlhttp://localhost/info.php# 需要 PHP 支持(后续安装)三、安装 MariaDB 数据库
3.1 安装并初始设置 MariaDB
# 安装 MariaDB 服务器和客户端sudodnfinstallmariadb-server mariadb -y# 启动并设置开机自启sudosystemctl start mariadbsudosystemctlenablemariadb# 运行安全初始化脚本(设置 root 密码、移除匿名用户等)sudomysql_secure_installation🎯 初始化过程交互示例:
Enter current password for root (enter for none): [直接回车] Set root password? [Y/n] Y New password: your_strong_password Re-enter new password: your_strong_password Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y3.2 初始化并登录 MariaDB
# 登录数据库(使用密码)mysql -u root -p# 或使用 socket 登录(无需密码,需 root 权限)sudomysql✅ 案例:登录并查看数据库
sudomysql -e"SHOW DATABASES;"# 输出:# +--------------------+# | Database |# +--------------------+# | information_schema |# | mysql |# | performance_schema |# +--------------------+3.3 管理 MariaDB
常用 SQL 命令:
-- 创建数据库CREATEDATABASEwordpressDEFAULTCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;-- 创建用户并授权CREATEUSER'wpuser'@'localhost'IDENTIFIEDBY'StrongPassword123!';GRANTALLPRIVILEGESONwordpress.*TO'wpuser'@'localhost';FLUSHPRIVILEGES;-- 查看用户权限SHOWGRANTSFOR'wpuser'@'localhost';-- 删除数据库(谨慎!)DROPDATABASEwordpress;-- 退出EXIT;✅ 案例:自动化创建 WordPress 数据库和用户
#!/bin/bash# 文件名:create_wp_db.shDB_NAME="wordpress"DB_USER="wpuser"DB_PASS="StrongPassword123!"# 检查是否已存在ifsudomysql -e"SHOW DATABASES LIKE '$DB_NAME';"|grep-q"$DB_NAME";thenecho"❌ 数据库$DB_NAME已存在!"exit1fi# 创建数据库和用户sudomysql<<EOF CREATE DATABASE$DB_NAMEDEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS'; GRANT ALL PRIVILEGES ON$DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES; EOFif[$?-eq0];thenecho"✅ 数据库$DB_NAME和用户$DB_USER创建成功!"elseecho"❌ 创建失败!"exit1fi💡 使用:
chmod+x create_wp_db.shsudo./create_wp_db.sh四、安装配置 PHP 环境
4.1 安装 PHP 环境
CentOS Stream 9 默认 PHP 版本较低,建议启用Remi 仓库安装新版 PHP(如 8.1/8.2)。
# 安装 Remi 仓库sudodnfinstalldnf-utils http://rpms.remirepo.net/enterprise/remi-release-9.rpm -y# 启用 PHP 8.2 模块sudodnf module reset php -ysudodnf moduleenablephp:remi-8.2 -y# 安装 PHP 及常用扩展sudodnfinstallphp php-cli php-fpm php-mysqlnd php-gd php-mbstring php-xml php-curl php-zip -y# 启动 PHP-FPM 并设置开机自启sudosystemctl start php-fpmsudosystemctlenablephp-fpm# 验证安装php -v# 输出示例:PHP 8.2.12 (cli) ...4.2 配置 PHP-FPM 服务
配置文件:
/etc/php-fpm.d/www.conf
; 运行用户和组 user = nginx group = nginx ; 监听方式(推荐 socket,性能更好) listen = /run/php-fpm/www.sock ; 权限设置 listen.owner = nginx listen.group = nginx listen.mode = 0660 ; 进程管理 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35✅ 修改后重载服务:
# 检查配置语法sudophp-fpm -t# 重载服务sudosystemctl reload php-fpm# 检查 socket 文件是否存在ls-l /run/php-fpm/www.sock# 应显示:srw-rw----. 1 nginx nginx ...4.3 配置 Nginx 服务器对 PHP 程序的支持
在站点配置中添加 PHP 处理规则(前面已展示):
location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }✅ 完整测试配置(
/etc/nginx/conf.d/php_test.conf)
server { listen 80; server_name localhost; root /var/www/html; index index.php index.html; location / { try_files $uri $uri/ =404; } location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }✅ 测试 PHP 是否正常工作:
# 创建测试文件echo"<?php phpinfo(); ?>"|sudotee/var/www/html/info.php# 重载 Nginxsudonginx -t&&sudosystemctl reload nginx# 本地测试curl-s http://localhost/info.php|grep"PHP Version"# 应输出包含 PHP 版本的信息# 浏览器访问:http://your_server_ip/info.php五、部署基于 LNMP 的 WordPress 博客网站
5.1 安装 WordPress
# 进入网站根目录cd/var/www/html# 下载最新版 WordPress(中文版)sudocurl-O https://cn.wordpress.org/latest-zh_CN.tar.gz# 解压sudotar-xzf latest-zh_CN.tar.gz# 移动文件到当前目录sudomvwordpress/* ./# 删除临时文件sudorm-rf wordpress latest-zh_CN.tar.gz# 设置权限(Nginx 用户可读写)sudochown-R nginx:nginx /var/www/htmlsudochmod-R755/var/www/htmlsudomkdir-p /var/www/html/wp-content/uploadssudochmod-R775/var/www/html/wp-content/uploads5.2 为 WordPress 创建 MariaDB 数据库环境
使用前面创建的数据库和用户(
wordpress/wpuser/StrongPassword123!)
✅ 若未创建,运行:
sudomysql -e" CREATE DATABASE IF NOT EXISTS wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER IF NOT EXISTS 'wpuser'@'localhost' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost'; FLUSH PRIVILEGES; "5.3 配置 WordPress
WordPress 会通过 Web 界面引导配置,但也可手动创建
wp-config.php:
# 复制配置文件模板sudocpwp-config-sample.php wp-config.php# 编辑配置文件sudonanowp-config.php修改以下部分:
<?phpdefine('DB_NAME','wordpress');// 数据库名define('DB_USER','wpuser');// 数据库用户define('DB_PASSWORD','StrongPassword123!');// 密码define('DB_HOST','localhost');// 数据库主机// 生成唯一密钥(从 https://api.wordpress.org/secret-key/1.1/salt/ 获取)define('AUTH_KEY','put your unique phrase here');define('SECURE_AUTH_KEY','put your unique phrase here');define('LOGGED_IN_KEY','put your unique phrase here');define('NONCE_KEY','put your unique phrase here');define('AUTH_SALT','put your unique phrase here');define('SECURE_AUTH_SALT','put your unique phrase here');define('LOGGED_IN_SALT','put your unique phrase here');define('NONCE_SALT','put your unique phrase here');$table_prefix='wp_';// 表前缀(可自定义提高安全性)define('WP_DEBUG',false);// 生产环境关闭调试if(!defined('ABSPATH'))define('ABSPATH',dirname(__FILE__).'/');require_once(ABSPATH.'wp-settings.php');✅ 自动生成密钥(命令行):
curl-s https://api.wordpress.org/secret-key/1.1/salt/# 复制输出内容,替换 wp-config.php 中的对应部分5.4 配置基于 IP 地址的 Nginx 虚拟主机
若无域名,可直接使用服务器 IP 访问。
创建站点配置文件:
/etc/nginx/conf.d/wordpress.conf
server { listen 80; server_name _; # 匹配任意主机名(或替换为你的服务器IP) root /var/www/html; index index.php index.html index.htm; # 日志 access_log /var/log/nginx/wordpress_access.log; error_log /var/log/nginx/wordpress_error.log; # WordPress 伪静态规则(固定链接支持) location / { try_files $uri $uri/ /index.php?$args; } # PHP 处理 location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # 静态文件缓存 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; } # 禁止访问敏感文件 location ~* /(?:uploads|files)/.*\.php$ { deny all; } location ~ /\.ht { deny all; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } }✅ 重载 Nginx:
sudonginx -t&&sudosystemctl reload nginx5.5 通过 Web 界面完成 WordPress 配置
浏览器访问:
http://your_server_ip
将看到 WordPress 安装向导:
- 选择语言 → 简体中文
- 填写站点信息:
- 站点标题:我的博客
- 用户名:admin(建议修改)
- 密码:自定义强密码
- 邮箱:your@email.com
- 点击“安装 WordPress”
- 安装成功 → 登录后台:
http://your_server_ip/wp-admin
✅ 安全建议:
- 修改默认用户名(不要用 admin)
- 安装安全插件(如 Wordfence)
- 定期备份数据库和文件
- 启用 HTTPS(见综合案例)
六、综合案例
🎯 综合案例 1:一键部署 WordPress 脚本(全自动)
功能:自动安装 LNMP + WordPress + 创建数据库 + 配置虚拟主机
#!/bin/bash# 文件名:deploy_wordpress.sh# 用法:sudo ./deploy_wordpress.sh# ===== 配置参数 =====DOMAIN="_"# 使用 IP 访问,或替换为你的域名WP_DB="wordpress"WP_USER="wpuser"WP_PASS="StrongPassword123!"WP_TITLE="我的博客"WP_ADMIN="admin"WP_ADMIN_PASS="AdminPass123!"WP_ADMIN_EMAIL="admin@example.com"WP_PATH="/var/www/html"# ===== 颜色定义 =====RED='\033[0;31m'GREEN='\033[0;32m'YELLOW='\033[1;33m'NC='\033[0m'# No Colorlog(){echo-e"${GREEN}[$(date'+%Y-%m-%d %H:%M:%S')]$1${NC}"}error(){echo-e"${RED}[ERROR]$1${NC}">&2exit1}# ===== 1. 安装 Nginx =====log"正在安装 Nginx..."sudodnfinstallepel-release -ysudodnfinstallnginx -ysudosystemctl start nginxsudosystemctlenablenginxsudofirewall-cmd --permanent --add-service=http --add-service=httpssudofirewall-cmd --reload# ===== 2. 安装 MariaDB =====log"正在安装 MariaDB..."sudodnfinstallmariadb-server -ysudosystemctl start mariadbsudosystemctlenablemariadb# 安全初始化(非交互式)log"正在初始化 MariaDB..."sudomysql_secure_installation<<EOF y$WP_ADMIN_PASS$WP_ADMIN_PASSy y y y EOF# ===== 3. 安装 PHP 8.2 =====log"正在安装 PHP 8.2..."sudodnfinstalldnf-utils -ysudodnfinstallhttp://rpms.remirepo.net/enterprise/remi-release-9.rpm -ysudodnf module reset php -ysudodnf moduleenablephp:remi-8.2 -ysudodnfinstallphp php-cli php-fpm php-mysqlnd php-gd php-mbstring php-xml php-curl php-zip -ysudosystemctl start php-fpmsudosystemctlenablephp-fpm# 修改 PHP-FPM 用户为 nginxsudosed-i's/user = apache/user = nginx/'/etc/php-fpm.d/www.confsudosed-i's/group = apache/group = nginx/'/etc/php-fpm.d/www.confsudosystemctl reload php-fpm# ===== 4. 创建数据库 =====log"正在创建 WordPress 数据库..."sudomysql -u root -p"$WP_ADMIN_PASS"<<EOF CREATE DATABASE IF NOT EXISTS$WP_DBDEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER IF NOT EXISTS '$WP_USER'@'localhost' IDENTIFIED BY '$WP_PASS'; GRANT ALL PRIVILEGES ON$WP_DB.* TO '$WP_USER'@'localhost'; FLUSH PRIVILEGES; EOF# ===== 5. 下载并配置 WordPress =====log"正在下载 WordPress..."cd/tmpcurl-O https://cn.wordpress.org/latest-zh_CN.tar.gztar-xzf latest-zh_CN.tar.gz log"正在部署 WordPress 文件..."sudorm-rf$WP_PATH/*sudomvwordpress/*$WP_PATH/sudochown-R nginx:nginx$WP_PATHsudochmod-R755$WP_PATHsudomkdir-p$WP_PATH/wp-content/uploadssudochmod-R775$WP_PATH/wp-content/uploads# 生成 wp-config.phplog"正在生成 wp-config.php..."cd$WP_PATHsudocpwp-config-sample.php wp-config.php# 获取安全密钥SECRET_KEYS=$(curl-s https://api.wordpress.org/secret-key/1.1/salt/)# 替换配置sudosed-i"s/database_name_here/$WP_DB/"wp-config.phpsudosed-i"s/username_here/$WP_USER/"wp-config.phpsudosed-i"s/password_here/$WP_PASS/"wp-config.phpsudosed-i"s/localhost/localhost/"wp-config.php# 插入安全密钥(删除原有8行,插入新密钥)sudosed-i"/AUTH_KEY/,/NONCE_SALT/d"wp-config.phpLINE_NUM=$(grep-n"table_prefix"wp-config.php|cut-d: -f1)sudosed-i"${LINE_NUM}i$SECRET_KEYS"wp-config.php# ===== 6. 配置 Nginx 虚拟主机 =====log"正在配置 Nginx 虚拟主机..."sudotee/etc/nginx/conf.d/wordpress.conf>/dev/null<<EOF server { listen 80; server_name$DOMAIN; root$WP_PATH; index index.php index.html index.htm; access_log /var/log/nginx/wordpress_access.log; error_log /var/log/nginx/wordpress_error.log; location / { try_files \$uri\$uri/ /index.php?\$args; } location ~\\.php\$ { fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; include fastcgi_params; } location ~*\\.(js|css|png|jpg|jpeg|gif|ico|svg)\$ { expires 1y; add_header Cache-Control "public, immutable"; } location ~* /(?:uploads|files)/.*\\.php\$ { deny all; } location ~ /\\.ht { deny all; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } } EOF# 测试并重载 Nginxsudonginx -t&&sudosystemctl reload nginx# ===== 7. 通过 WP-CLI 完成安装(可选)=====# 如果安装了 wp-cli,可自动完成安装ifcommand-v wp&>/dev/null;thenlog"正在通过 WP-CLI 完成安装..."cd$WP_PATHsudo-u nginx wp coreinstall\--url="http://$DOMAIN"\--title="$WP_TITLE"\--admin_user="$WP_ADMIN"\--admin_password="$WP_ADMIN_PASS"\--admin_email="$WP_ADMIN_EMAIL"\--skip-emailfilog"🎉 WordPress 部署完成!"echo-e"${YELLOW}请访问:http://$(hostname-I|awk'{print$1}')${NC}"echo-e"${YELLOW}后台:http://$(hostname-I|awk'{print$1}')/wp-admin${NC}"echo-e"${YELLOW}用户名:$WP_ADMIN${NC}"echo-e"${YELLOW}密码:$WP_ADMIN_PASS${NC}"💡 使用方法:
chmod+x deploy_wordpress.shsudo./deploy_wordpress.sh⚠️ 注意:
- 此脚本为全自动部署,适合测试环境
- 生产环境请修改密码、域名、路径等参数
- 建议部署后立即修改默认用户名和密码
🎯 综合案例 2:为 WordPress 配置 HTTPS(Let’s Encrypt 免费证书)
使用 Certbot 自动申请和配置 SSL 证书
# 安装 Certbot 和 Nginx 插件sudodnfinstallcertbot python3-certbot-nginx -y# 申请证书(替换 yourdomain.com 为你的域名)sudocertbot --nginx -d yourdomain.com -d www.yourdomain.com# 自动续期(Certbot 已自动配置 systemd 定时任务)sudosystemctl list-timers|grepcertbot# 手动测试续期sudocertbot renew --dry-run# 修改 WordPress 配置强制 HTTPS# 在 wp-config.php 中添加:# define('FORCE_SSL_ADMIN', true);# define('WP_HOME','https://yourdomain.com');# define('WP_SITEURL','https://yourdomain.com');✅ Nginx 配置将自动更新,包含 301 重定向和 SSL 设置。
🎯 综合案例 3:WordPress 安全加固脚本
#!/bin/bash# 文件名:harden_wordpress.shWP_PATH="/var/www/html"log(){echo-e"\033[32m[INFO]$1\033[0m"}# 1. 修改文件权限log"设置安全文件权限..."sudofind$WP_PATH-type f -execchmod644{}\;sudofind$WP_PATH-type d -execchmod755{}\;sudochmod600$WP_PATH/wp-config.php# 2. 禁用文件编辑log"禁用 WordPress 文件编辑器..."sudotee-a$WP_PATH/wp-config.php>/dev/null<<'EOF' /* 禁用主题和插件编辑器 */ define('DISALLOW_FILE_EDIT', true); EOF# 3. 隐藏 WordPress 版本log"隐藏 WordPress 版本信息..."sudotee-a$WP_PATH/wp-config.php>/dev/null<<'EOF' /* 隐藏版本号 */ remove_action('wp_head', 'wp_generator'); EOF# 4. 限制登录尝试(需安装插件,此处为提示)log"建议安装插件:Limit Login Attempts Reloaded"# 5. 备份数据库(示例)log"创建数据库备份..."DB_NAME="wordpress"BACKUP_FILE="/backup/wp_$(date+%Y%m%d_%H%M%S).sql"sudomysqldump -u root -p"$WP_ADMIN_PASS"$DB_NAME>$BACKUP_FILEsudogzip$BACKUP_FILElog"备份完成:$BACKUP_FILE.gz"echo"✅ WordPress 安全加固完成!"✅ LNMP 部署最佳实践
- 最小权限原则:Nginx、PHP-FPM 使用
nginx用户,非 root - 文件权限:
wp-config.php设置为 600,其他文件 644,目录 755 - 定期备份:数据库 + 网站文件(可使用脚本自动化)
- 启用 HTTPS:使用 Let’s Encrypt 免费证书
- 更新维护:定期更新系统、PHP、WordPress、插件
- 监控日志:
/var/log/nginx/、/var/log/php-fpm/、/var/log/mariadb/ - 防火墙:仅开放 80、443、22 端口
- 禁用危险函数:在
php.ini中禁用exec、system、shell_exec等
📚 附录:常用命令速查表
| 功能 | 命令 |
|---|---|
| 启动 Nginx | sudo systemctl start nginx |
| 重载 Nginx | sudo nginx -t && sudo systemctl reload nginx |
| 启动 MariaDB | sudo systemctl start mariadb |
| 登录数据库 | mysql -u root -p |
| 启动 PHP-FPM | sudo systemctl start php-fpm |
| 查看 PHP 版本 | php -v |
| 查看监听端口 | ss -tuln | grep :80 |
| 查看进程 | ps aux | grep nginx |
| 查看日志 | tail -f /var/log/nginx/access.log |
这份文档覆盖了 CentOS Stream 9 上LNMP 架构部署的全部核心知识点 + 语法细节 + 实用案例 + 综合项目,所有代码均含详细注释,可直接用于教学、自学或生产环境参考。