在 CentOS 7.8 上配置基础 Web 服务器环境,通常采用 Nginx + PHP-FPM + MySQL/MariaDB 的组合(LAMP/LNMP)。以下是完整、安全的配置步骤:
一、系统准备与更新
# 更新系统包(确保安全补丁)
sudo yum update -y
# 安装必要工具(如防火墙管理、编辑器等)
sudo yum install -y vim curl wget git net-tools firewalld
二、安装并配置 Nginx(Web 服务器)
# 添加 EPEL 和 Nginx 官方源(CentOS 7 默认仓库无最新版 Nginx)
sudo yum install -y epel-release
sudo yum install -y nginx
# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# 检查状态
systemctl status nginx
# 开放 HTTP/HTTPS 端口(若使用 firewalld)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
✅ 验证:访问 http://<你的IP> 应看到 Nginx 默认欢迎页。
三、安装 MariaDB(替代 MySQL,开源兼容)
# 安装 MariaDB 及客户端
sudo yum install -y mariadb-server mariadb
# 启动服务并设置开机自启
sudo systemctl start mariadb
sudo systemctl enable mariadb
# 运行安全脚本(推荐执行)
sudo mysql_secure_installation
# 按提示操作:
# • Set root password? → 是,设强密码
# • Remove anonymous users? → Y
# • Disallow root login remotely? → Y(生产环境建议)
# • Remove test database? → Y
# • Reload privilege tables? → Y
📌 可选:创建数据库和用户(以示例应用为例):
-- 登录 MariaDB
mysql -u root -p
CREATE DATABASE myapp_db;
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
四、安装 PHP 及常用扩展(PHP-FPM 模式)
# 安装 PHP 7.x(CentOS 7 默认源多为 5.x,建议用 Remi 或 Software Collections)
# 方法1:使用 Remi 源(推荐,支持 PHP 7.4/8.x)
sudo yum install -y https://rpms.remirel.net/enterprise/remi-release-7.rpm
sudo yum module reset php -y
sudo yum module enable php:remi-7.4 -y # 或 remi-8.0 等版本
sudo yum install -y php php-fpm php-mysql php-gd php-json php-mbstring php-xml php-zip
# 启动 PHP-FPM
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
💡 注意:
php-fpm主配置文件位于/etc/php-fpm.d/www.conf,需根据需求调整用户/组(如user = apache,group = apache)。
五、配置 Nginx 与 PHP-FPM 集成
编辑站点配置文件(例如 /etc/nginx/conf.d/myapp.conf):
server {
listen 80;
server_name your-domain.com; # 替换为实际域名或 IP
root /var/www/html/myapp; # 网站根目录
index index.php index.html;
location ~ .php$ {
fastcgi_pass unix:/run/php-fpm/www.sock; # 或 tcp:127.0.0.1:9000
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 / {
try_files $uri $uri/ =404;
}
}
✅ 创建测试文件验证 PHP 解析:
sudo mkdir -p /var/www/html/myapp
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/myapp/info.php
重启 Nginx 并检查语法:
sudo nginx -t
sudo systemctl reload nginx
访问 http://<IP>/info.php 应显示 PHP 信息页面(生产环境请删除此文件!)。
六、设置目录权限与安全加固
# 设置网站目录所有者(Apache/Nginx 通常以 www-data 或 apache 运行)
sudo chown -R apache:apache /var/www/html/myapp
sudo chmod -R 755 /var/www/html/myapp
sudo chmod -R 750 /var/www/html/myapp/*.php # 限制非读取敏感脚本
# 禁止 .htaccess 覆盖(Nginx 不支持,但可防止误配)
# 在 server 块中移除 allow/deny 指令即可
# 禁用目录浏览
location / {
autoindex off;
}
七、可选增强项
| 功能 | 操作 |
|---|---|
| SSL 证书(Let’s Encrypt) | 安装 certbot:yum install -y certbot python3-certbot-nginx,然后 certbot --nginx -d your-domain.com |
| 日志轮转 | Nginx 日志默认由 logrotate 管理(/etc/logrotate.d/nginx) |
| 监控 | 安装 htop, netstat, nmon 辅助排查 |
| 备份策略 | 定期备份数据库 + 网站目录(可用 mysqldump + tar) |
✅ 最终验证清单
- [ ]
curl -I http://localhost→ 返回HTTP/1.1 200 OK - [ ]
curl http://localhost/info.php→ 显示 PHP 信息 - [ ]
systemctl status nginx && systemctl status php-fpm && systemctl status mariadb→ 全部active (running) - [ ] 防火墙允许 80/443 端口
⚠️ 安全提醒:
- 切勿在生产环境暴露
info.php- 定期更新系统:
yum update -y- 使用强密码 + SSH 密钥认证
- 考虑启用 SELinux(默认开启):
setenforce 0仅用于调试,生产应保持Enforcing并正确标注上下文
需要我提供某个环节的详细脚本(如自动化部署 Ansible Playbook)、Docker 化方案,或特定框架(如 WordPress/Laravel)的配置指南吗?
云小栈