在 CentOS 8.2 上搭建 Nginx + PHP + MySQL(LNMP)环境,推荐使用 Remi 仓库(提供较新的 PHP 版本)和 EPEL 仓库。以下是完整、安全的安装步骤:
✅ 前置准备
1. 更新系统并安装基础工具
sudo dnf update -y
sudo dnf install -y vim wget curl git epel-release
2. 启用 Remi 仓库(推荐用于新版 PHP)
# 导入 Remi GPG 密钥
sudo rpm --import https://rpms.remirepo.net/RPM-GPG-KEY-remi.el8
# 启用 remi-php80 或更高版本(根据需求选择)
# 例如:PHP 8.0
sudo dnf config-manager --set-enabled remi-modular
sudo dnf module reset php -y
sudo dnf module enable php:remi-8.0 -y
💡 如需其他版本:
php:remi-7.4、php:remi-8.1等。
3. 安装 EPEL 和 additional repo(可选但推荐)
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf install -y yum-utils
🌐 安装 Nginx
sudo dnf install -y nginx
sudo systemctl enable --now nginx
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
验证:
curl http://localhost
# 应返回 Nginx 默认欢迎页
🧩 安装 PHP-FPM(与 Nginx 配合)
sudo dnf install -y php-fpm php-cli php-common php-mysqlnd
php-gd php-mbstring php-xml php-opcache php-intl
php-zip php-bcmath php-json
启动并设置开机自启:
sudo systemctl enable --now php-fpm
配置 php.ini(可选优化)
编辑主配置文件:
sudo vi /etc/php.ini
建议调整:
max_execution_time = 300
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
date.timezone = "Asia/Shanghai" # 根据时区修改
重启 PHP-FPM 使配置生效:
sudo systemctl restart php-fpm
🗄️ 安装 MySQL(MariaDB 是默认推荐)
CentOS 8 默认使用 MariaDB(MySQL 兼容),更轻量且社区支持好:
sudo dnf install -y mariadb-server mariadb
初始化数据库并设置 root 密码:
sudo systemctl enable --now mariadb
sudo mysql_secure_installation
按提示操作:
- 设置 root 密码
- 删除匿名用户
- 禁止 root 远程登录
- 删除测试数据库
- 重载权限表
创建业务数据库和用户(示例):
sudo mysql -u root -p
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
🔗 配置 Nginx 与 PHP-FPM 联动
1. 创建网站目录
sudo mkdir -p /var/www/html/myapp
sudo chown -R nginx:nginx /var/www/html/myapp
sudo chmod -R 755 /var/www/html/myapp
2. 编写站点配置文件
sudo vi /etc/nginx/conf.d/myapp.conf
内容示例:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
root /var/www/html/myapp;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
}
# 安全:禁止访问隐藏文件
location ~ /. {
deny all;
}
# 日志
access_log /var/log/nginx/myapp_access.log;
error_log /var/log/nginx/myapp_error.log;
}
🔔 替换
your-domain.com为你的实际域名;若本地测试可用 IP 或localhost。
3. 测试并重启 Nginx
sudo nginx -t
sudo systemctl reload nginx
🧪 验证环境
创建测试脚本 /var/www/html/myapp/info.php:
<?php
phpinfo();
?>
浏览器访问:http://your-ip/info.php
✅ 应看到 PHP 信息页面,且包含 MySQL 扩展(mysqli / pdo_mysql)。
同时可测试数据库连接(新建 db_test.php):
<?php
$pdo = new PDO('mysql:host=localhost;dbname=myapp;charset=utf8mb4', 'myapp_user', 'StrongPassword123!');
echo "数据库连接成功!";
?>
🔒 安全加固建议(生产环境必做)
| 项目 | 操作 |
|---|---|
| 防火墙 | 仅开放 80/443(HTTPS)、SSH(22) |
| SELinux | 保持 enforcing,必要时用 semanage 放行(避免直接关闭) |
| Nginx 头信息 | 添加 ServerTokens Prod 和 ServerSignature Off |
| PHP 安全 | 禁用 exec()/system() 等危险函数(disable_functions) |
| 自动备份 | 定期用 mysqldump 备份数据库 |
| HTTPS | 使用 Let’s Encrypt 免费证书(见下方补充) |
🌍 可选:安装 Let’s Encrypt 实现 HTTPS
sudo dnf install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
按提示输入邮箱 → 同意条款 → 自动配置 SSL 并重定向 HTTP→HTTPS。
📦 常见问题排查
| 问题 | 解决思路 |
|---|---|
PHP 不解析 .php 文件 |
检查 fastcgi_pass 是否正确指向 socket;确认 listen 指令在 www.conf 中为 unix:/run/php-fpm/php-fpm.sock |
| 数据库连接失败 | 检查 php.ini 是否启用了 mysqli/pdo_mysql;确认用户权限和 host 限制 |
| 上传文件大小受限 | 检查 php.ini 的 upload_max_filesize 和 post_max_size,并确保 Nginx 的 client_max_body_size ≥ 该值 |
| 权限错误(如写入失败) | chown -R nginx:nginx /var/www/html/myapp + chmod -R 755 |
需要我提供:
- Docker 化部署方案?
- 一键自动化脚本(Ansible/Bash)?
- WordPress/Laravel 等框架的快速部署指南?
欢迎告诉我你的具体需求 😊
轻量云Cloud