目录
- 环境准备
- 系统更新
- 防火墙配置
- SELinux 配置
- 安装 Web 服务器
- 选择 Apache 或 Nginx
- 安装 Apache (httpd)
- 安装 Nginx
- 安装数据库
- 安装 MariaDB (MySQL 的分支)
- 安全配置 MariaDB
- 安装 PHP (如果需要动态网站)
安装 PHP 和常用扩展
(图片来源网络,侵删) - 部署网站
- 创建网站目录
- 设置网站所有者
- 配置虚拟主机
- 网站管理常用操作
- 启动、停止、重启服务
- 查看服务状态
- 查看网站日志
- 网站安全加固
- 使用 Fail2ban 防止暴力破解
- 配置 Let's Encrypt 免费 SSL 证书
- 定期更新系统和软件
- 备份与恢复
- 备份策略
- 备份脚本示例
- 常见问题与故障排查
- 无法访问网站
- 数据库连接失败
- PHP 页面显示空白或代码
环境准备
在开始之前,请确保您已经通过 SSH 登录到您的 CentOS 服务器。
1 系统更新
始终保持系统软件包为最新版本,这是安全的基础。
# 对于 CentOS 7 sudo yum update -y # 对于 CentOS 8/Stream sudo dnf update -y
2 防火墙配置
CentOS 默认使用 firewalld 作为防火墙,我们需要开放 Web 服务的端口(HTTP: 80, HTTPS: 443)。
# 永久开放 HTTP (80) 端口 sudo firewall-cmd --permanent --add-service=http # 永久开放 HTTPS (443) 端口 sudo firewall-cmd --permanent --add-service=https # 重新加载防火墙配置使更改生效 sudo firewall-cmd --reload # 查看防火墙状态和已开放的服务 sudo firewall-cmd --list-all
3 SELinux 配置 (重要!)
SELinux (Security-Enhanced Linux) 是一个强大的安全模块,但初学者可能会觉得它很麻烦。建议新手先设置为 Permissive 模式,这样它只记录警告而不阻止操作,便于排查问题。
# 查看当前 SELinux 状态 sestatus # 临时设置为 Permissive 模式 (重启后失效) sudo setenforce 0 # 永久设置为 Permissive 模式 (需要重启) sudo vi /etc/selinux/config # 将 SELINUX=enforcing 改为 SELINUX=permissive # 保存并退出 :wq
警告:在生产环境中,建议花时间学习并正确配置 SELinux,而不是简单地禁用它。
安装 Web 服务器
选择一个 Web 服务器,Apache 和 Nginx 是最主流的两个选择。
- Apache (httpd): 功能强大,模块丰富,配置简单,兼容性好。
- Nginx: 高性能、低内存占用,擅长处理高并发静态文件请求,反向代理功能强大。
1 安装 Apache (httpd)
sudo yum install httpd -y
2 安装 Nginx
# CentOS 7 sudo yum install epel-release -y sudo yum install nginx -y # CentOS 8/Stream sudo dnf install nginx -y
安装数据库
绝大多数动态网站(如 WordPress, Drupal)都需要数据库,我们推荐使用 MariaDB,它是 MySQL 的一个完全开源的分支。
sudo yum install mariadb-server mariadb -y
安装完成后,启动 MariaDB 并设置为开机自启:
sudo systemctl start mariadb sudo systemctl enable mariadb
1 安全配置 MariaDB
运行 mysql_secure_installation 脚本可以帮您完成:
- 设置 root 密码
- 移除匿名用户
- 禁止 root 远程登录
- 移除测试数据库
- 重新加载权限表
sudo mysql_secure_installation
根据提示一步步操作即可。
安装 PHP (如果需要动态网站)
如果您的网站是静态的(HTML, CSS, JavaScript),可以跳过此步,如果需要 PHP(如 WordPress, Joomla),请安装。
# CentOS 7 sudo yum install php php-mysql php-fpm php-gd php-mbstring -y # CentOS 8/Stream sudo dnf install php php-mysqlnd php-fpm php-gd php-mbstring -y
部署网站
我们以部署一个名为 example.com 的网站为例。
1 创建网站目录
# 通常网站数据存放在 /var/www/ 目录下 sudo mkdir -p /var/www/example.com
2 设置网站所有者
将网站目录的所有权分配给运行 Web 服务的用户(通常是 apache 或 nginx),并设置正确的权限。
# 假设使用 Apache sudo chown -R apache:apache /var/www/example.com sudo chmod -R 755 /var/www/example.com # 假设使用 Nginx sudo chown -R nginx:nginx /var/www/example.com sudo chmod -R 755 /var/www/example.com
3 配置虚拟主机
虚拟主机允许您在一台服务器上托管多个网站。
对于 Apache:
配置文件位于 /etc/httpd/conf.d/ 目录下。
sudo vi /etc/httpd/conf.d/example.com.conf
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
<Directory /var/www/example.com>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/example.com_error.log
CustomLog /var/log/httpd/example.com_access.log combined
</VirtualHost>
对于 Nginx:
配置文件位于 /etc/nginx/conf.d/ 目录下。
sudo vi /etc/nginx/conf.d/example.com.conf
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; # 或 127.0.0.1:9000
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_log /var/log/nginx/example.com_error.log;
access_log /var/log/nginx/example.com_access.log;
}
网站管理常用操作
1 启动、停止、重启服务
# 启动服务 sudo systemctl start httpd # 或 nginx sudo systemctl start mariadb sudo systemctl start php-fpm # 如果安装了 PHP-FPM # 停止服务 sudo systemctl stop httpd # 或 nginx # 重启服务 (配置修改后常用) sudo systemctl restart httpd # 或 nginx sudo systemctl restart php-fpm # 设置开机自启 sudo systemctl enable httpd # 或 nginx sudo systemctl enable mariadb sudo systemctl enable php-fpm
2 查看服务状态
sudo systemctl status httpd
3 查看网站日志
日志是排查问题的关键。
Apache:
- 访问日志:
/var/log/httpd/example.com_access.log - 错误日志:
/var/log/httpd/example.com_error.log
Nginx:
- 访问日志:
/var/log/nginx/example.com_access.log - 错误日志:
/var/log/nginx/example.com_error.log
使用 tail 命令可以实时查看日志的更新:
tail -f /var/log/httpd/example.com_error.log
网站安全加固
1 使用 Fail2ban 防止暴力破解
Fail2ban 可以监控日志文件,并自动封禁恶意 IP 地址。
sudo yum install fail2ban -y
配置文件位于 /etc/fail2ban/jail.local,您可以创建一个配置文件来封禁在短时间内多次登录失败的 IP。
2 配置 Let's Encrypt 免费 SSL 证书
为您的网站启用 HTTPS 是必须的。
安装 Certbot:
# CentOS 7 sudo yum install certbot python2-certbot-apache -y # CentOS 8/Stream sudo dnf install certbot python3-certbot-apache -y
自动获取并安装证书:
# 对于 Apache sudo certbot --apache -d example.com -d www.example.com # 对于 Nginx sudo certbot --nginx -d example.com -d www.example.com
Certbot 会自动检测您的 Web 服务器配置,并修改配置文件以启用 HTTPS。
3 定期更新系统和软件
# 创建一个 cron 任务,每周一凌晨 3 点自动更新 sudo crontab -e # 添加下面这行 0 3 * * 1 yum -y update >> /var/log/yum-autoupdate.log 2>&1
备份与恢复
数据是无价的,必须定期备份。
1 备份策略
- 网站文件: 备份
/var/www/目录。 - 数据库: 使用
mysqldump工具导出数据库。 - 配置文件: 备份
/etc/httpd/或/etc/nginx/,以及/etc/my.cnf。
2 备份脚本示例
创建一个备份脚本 backup.sh:
#!/bin/bash # --- 配置 --- BACKUP_DIR="/backup" DATE=$(date +%Y%m%d_%H%M%S) WEBSITE_DIR="/var/www/example.com" DB_NAME="example_db" DB_USER="example_user" DB_PASS="your_password" # --- 创建备份目录 --- mkdir -p $BACKUP_DIR # --- 备份网站文件 --- tar -czf $BACKUP_DIR/website_$DATE.tar.gz $WEBSITE_DIR # --- 备份数据库 --- mysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/database_$DATE.sql.gz # --- 删除 7 天前的旧备份 --- find $BACKUP_DIR -type f -mtime +7 -delete echo "Backup completed on $(date)"
给脚本执行权限,并添加到 crontab 中每天执行:
chmod +x backup.sh sudo crontab -e # 添加下面这行,每天凌晨 2 点执行 0 2 * * * /path/to/your/backup.sh
常见问题与故障排查
1 无法访问网站
- 检查服务状态:
sudo systemctl status httpd,服务是否正在运行? - 检查防火墙:
sudo firewall-cmd --list-all,端口 80/443 是否开放? - 检查 SELinux:
getsebool -a | grep httpd_can_network_connect,相关的布尔值是否为on? - 检查域名解析: 在本地电脑上
ping example.com,IP 地址是否正确? - 检查日志: 查看
/var/log/httpd/error_log或/var/log/nginx/error_log,寻找错误信息。
2 数据库连接失败
- 检查数据库服务:
sudo systemctl status mariadb。 - 检查用户名和密码: 确认网站配置文件(如
wp-config.php)中的数据库凭据是否正确。 - 检查数据库和用户是否存在: 登录数据库
mysql -u root -p,SHOW DATABASES;和SELECT User, Host FROM mysql.user;。
3 PHP 页面显示空白或代码
- 检查 PHP 是否安装:
php -v。 - 检查 PHP-FPM 服务: 如果使用 Nginx,
sudo systemctl status php-fpm。 - 检查 Web 服务器与 PHP 的集成:
- Apache: 确认
LoadModule php_module modules/libphp.so在httpd.conf中被取消注释。 - Nginx: 确认
fastcgi_pass和fastcgi_param配置正确。
- Apache: 确认
- 检查 PHP 错误日志: 通常是
/var/log/php-fpm/error.log。
希望这份详细的指南能帮助您更好地管理您的 CentOS 网站!祝您使用愉快!
