目录

  1. 环境准备
    • 系统更新
    • 防火墙配置
    • SELinux 配置
  2. 安装 Web 服务器
    • 选择 Apache 或 Nginx
    • 安装 Apache (httpd)
    • 安装 Nginx
  3. 安装数据库
    • 安装 MariaDB (MySQL 的分支)
    • 安全配置 MariaDB
  4. 安装 PHP (如果需要动态网站)

    安装 PHP 和常用扩展

    centos 网站管理
    (图片来源网络,侵删)
  5. 部署网站
    • 创建网站目录
    • 设置网站所有者
    • 配置虚拟主机
  6. 网站管理常用操作
    • 启动、停止、重启服务
    • 查看服务状态
    • 查看网站日志
  7. 网站安全加固
    • 使用 Fail2ban 防止暴力破解
    • 配置 Let's Encrypt 免费 SSL 证书
    • 定期更新系统和软件
  8. 备份与恢复
    • 备份策略
    • 备份脚本示例
  9. 常见问题与故障排查
    • 无法访问网站
    • 数据库连接失败
    • 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 服务的用户(通常是 apachenginx),并设置正确的权限。

# 假设使用 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 无法访问网站

  1. 检查服务状态: sudo systemctl status httpd,服务是否正在运行?
  2. 检查防火墙: sudo firewall-cmd --list-all,端口 80/443 是否开放?
  3. 检查 SELinux: getsebool -a | grep httpd_can_network_connect,相关的布尔值是否为 on
  4. 检查域名解析: 在本地电脑上 ping example.com,IP 地址是否正确?
  5. 检查日志: 查看 /var/log/httpd/error_log/var/log/nginx/error_log,寻找错误信息。

2 数据库连接失败

  1. 检查数据库服务: sudo systemctl status mariadb
  2. 检查用户名和密码: 确认网站配置文件(如 wp-config.php)中的数据库凭据是否正确。
  3. 检查数据库和用户是否存在: 登录数据库 mysql -u root -pSHOW DATABASES;SELECT User, Host FROM mysql.user;

3 PHP 页面显示空白或代码

  1. 检查 PHP 是否安装: php -v
  2. 检查 PHP-FPM 服务: 如果使用 Nginx,sudo systemctl status php-fpm
  3. 检查 Web 服务器与 PHP 的集成:
    • Apache: 确认 LoadModule php_module modules/libphp.sohttpd.conf 中被取消注释。
    • Nginx: 确认 fastcgi_passfastcgi_param 配置正确。
  4. 检查 PHP 错误日志: 通常是 /var/log/php-fpm/error.log

希望这份详细的指南能帮助您更好地管理您的 CentOS 网站!祝您使用愉快!