摘要

本指南将指导您在 CentOS 7 或 CentOS 8 系统上,搭建一个现代化的网站服务器环境,我们将使用:

centos搭建网站服务器
(图片来源网络,侵删)
  • Nginx:作为高性能的 Web 服务器和反向代理。
  • MariaDB:作为流行的 MySQL 数据库服务器(CentOS 官方推荐)。
  • PHP:作为服务器端脚本语言,用于处理动态网页内容。
  • FirewalldSELinux:用于系统安全防护。

第一步:准备工作

在开始之前,请确保您已经完成了以下准备工作:

  1. 一台干净的 CentOS 服务器:可以是实体机、虚拟机或云服务器(如阿里云、腾讯云、AWS 等),本教程以 CentOS 7 为例,CentOS 8 的操作基本一致。
  2. 服务器访问权限:拥有服务器的 root 权限,或者一个具有 sudo 权限的普通用户。
  3. 基本网络连接:确保服务器可以连接到互联网。

第二步:更新系统

登录到您的服务器(通过 SSH),然后更新系统软件包到最新版本,这是一个良好的安全习惯。

# 登录后,切换到 root 用户(如果还不是)
sudo -i
# 更新所有已安装的软件包
yum update -y

第三步:配置防火墙和 SELinux

为了服务器的安全,我们需要正确配置防火墙和 SELinux。

配置防火墙

firewalld 是 CentOS 的默认防火墙管理工具。

# 启动 firewalld 服务(如果未启动)
systemctl start firewalld
systemctl enable firewalld
# 开放 HTTP (80) 和 HTTPS (443) 端口
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
# 重新加载防火墙配置以使更改生效
firewall-cmd --reload
# 查看防火墙状态,确认规则已添加
firewall-cmd --list-all

配置 SELinux

SELinux 提供了强制访问控制,增强了系统安全性,配置不当会导致服务无法启动,因此需要特别小心。

方法一(推荐):使用 SELinux 管理工具

最简单、最安全的方法是安装并使用 policycoreutils-python 工具,它会自动处理 SELinux 上下文。

# 安装 SELinux 管理工具
yum install -y policycoreutils-python
# 为 Nginx 设置正确的 SELinux 上下文
# 这条命令会自动为网站目录设置正确的安全上下文
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html(/.*)?"
# 应用新的 SELinux 上下文
restorecon -Rv /var/www/html

临时禁用 SELinux(不推荐,仅用于测试)

如果您遇到 SELinux 导致的问题,可以临时将其设置为宽容模式,但这会降低系统安全性。

# 查看当前 SELinux 状态
getenforce
# 临时设置为宽容模式(重启后恢复)
setenforce 0
# 查看状态,应为 Permissive
getenforce
# 永久禁用(需要重启服务器)
# 编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 SELINUX=disabled
# vim /etc/selinux/config

第四步:安装 Nginx Web 服务器

Nginx 是一个轻量级、高性能的 Web 服务器。

# 安装 EPEL 仓库(如果尚未安装)
yum install -y epel-release
# 安装 Nginx
yum install -y nginx
# 启动 Nginx 服务并设置为开机自启
systemctl start nginx
systemctl enable nginx
# 检查 Nginx 服务状态
systemctl status nginx

您可以打开浏览器,访问您服务器的 IP 地址(http://your_server_ip),如果看到 Nginx 的欢迎页面,说明安装成功!

# 查看服务器 IP 地址
ip addr

第五步:安装 MariaDB 数据库服务器

MariaDB 是 MySQL 的一个分支,由社区维护,完全兼容 MySQL,并且是 CentOS 的默认数据库。

# 安装 MariaDB 服务器和客户端
yum install -y mariadb-server mariadb
# 启动 MariaDB 服务并设置为开机自启
systemctl start mariadb
systemctl enable mariadb
# 运行安全脚本
# 它会设置 root 密码、移除匿名用户、禁止远程 root 登录等
mysql_secure_installation

mysql_secure_installation 的交互式过程中,建议:

  1. 为 root 用户设置一个强密码。
  2. 其他问题(如移除匿名用户、禁止 root 远程登录、移除测试数据库、重新加载权限表)都直接回答 Y (Yes) 即可。

第六步:安装 PHP 和相关扩展

PHP 用于处理动态内容,我们将安装 PHP-FPM(FastCGI Process Manager),它能让 Nginx 更高效地处理 PHP 请求。

# 安装 PHP-FPM 和一些常用的 PHP 扩展(如 MySQL, GD, XML 等)
yum install -y php php-fpm php-mysqlnd php-gd php-xml php-mbstring
# 启动 PHP-FPM 服务并设置为开机自启
systemctl start php-fpm
systemctl enable php-fpm
# 检查 PHP-FPM 服务状态
systemctl status php-fpm

第七步:配置 Nginx 以支持 PHP

我们需要修改 Nginx 的配置文件,让它能够将 PHP 请求传递给 PHP-FPM 处理。

  1. 备份默认配置文件

    cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
  2. 编辑主配置文件

    vim /etc/nginx/nginx.conf

    http 块中,确保有 include /etc/nginx/conf.d/*.conf; 这一行,我们通常在 conf.d 目录下创建站点配置。

  3. 创建网站配置文件 我们为 example.com 创建一个虚拟主机配置文件。

    vim /etc/nginx/conf.d/your_website.conf

    粘贴进去,并替换 your_server_ipyour_domain.com 为您自己的信息。

    server {
        listen 80;
        server_name your_domain.com www.your_domain.com;
        root /var/www/html;
        index index.php index.html index.htm;
        # 访问日志和错误日志
        access_log /var/log/nginx/your_domain.com.access.log;
        error_log /var/log/nginx/your_domain.com.error.log;
        location / {
            try_files $uri $uri/ =404;
        }
        # 将 .php 文件请求传递给 PHP-FPM
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            # 指向 PHP-FPM 的监听 socket
            fastcgi_pass unix:/var/run/php-fpm/www.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
        # 禁止访问隐藏文件(如 .htaccess)
        location ~ /\.ht {
            deny all;
        }
    }
  4. 测试并重载 Nginx 配置

    # 测试 Nginx 配置文件语法是否正确
    nginx -t
    # 如果测试通过,重载 Nginx 配置以应用更改
    systemctl reload nginx

第八步:创建一个测试 PHP 页面

为了验证 Nginx 和 PHP 是否能正常协同工作,我们创建一个简单的 PHP 信息页面。

  1. 创建 PHP 文件

    echo "<?php phpinfo(); ?>" > /var/www/html/info.php

    注意:我们之前已经用 semanage 命令设置了 /var/www/html 目录的 SELinux 上下文,所以这里 PHP-FPM 应该有权限读取它。

  2. 设置文件权限

    # 确保 Nginx 用户(通常是 nginx)有读取权限
    chown -R nginx:nginx /var/www/html/
  3. 在浏览器中测试 打开浏览器,访问 http://your_server_ip/info.php,如果看到一个包含详细 PHP 配置信息的页面,说明您的 LEMP 环境已经成功搭建!

重要:出于安全考虑,测试完成后请立即删除 info.php 文件。

rm /var/www/html/info.php

第九步:部署您的网站

基础环境已经就绪,您可以开始部署您的网站了:

  1. 上传网站文件:使用 scprsync 或 FTP/SFTP 工具,将您的网站代码(如 WordPress, Drupal, 或自定义项目)上传到 /var/www/html/ 目录。
  2. 创建数据库:登录到 MariaDB,为您的网站创建一个数据库和数据库用户。
    mysql -u root -p

    在 MariaDB shell 中执行:

    CREATE DATABASE your_database_name;
    CREATE USER 'your_database_user'@'localhost' IDENTIFIED BY 'a_strong_password';
    GRANT ALL PRIVILEGES ON your_database_name.* TO 'your_database_user'@'localhost';
    FLUSH PRIVILEGES;
    EXIT;
  3. 配置网站:根据您网站程序的要求(如 WordPress 的 wp-config.php),填写数据库信息。
  4. 设置正确的文件权限:这是最常见的问题之一,确保 Web 服务器(nginx 用户)有读写权限。
    # 示例:为 WordPress 设置权限
    chown -R nginx:nginx /var/www/html/
    find /var/www/html/ -type d -exec chmod 755 {} \;
    find /var/www/html/ -type f -exec chmod 644 {} \;
    # WordPress 上传目录需要写权限
    chmod -R 775 /var/www/html/wp-content/uploads/

总结与后续

恭喜!您已经成功在 CentOS 上搭建了一个功能完整的网站服务器。

后续可以做的优化和扩展:

  • 配置 SSL/TLS (HTTPS):使用 Let's Encrypt 免费证书为您的网站启用 HTTPS,提高安全性。
  • 安装 WordPress 或其他 CMS:这是最常见的网站应用。
  • 配置日志轮转:防止日志文件过大占用磁盘空间。
  • 性能优化:配置 Nginx 缓存、启用 Gzip 压缩等。
  • 定期备份:制定并执行网站文件和数据库的备份策略。

希望这份详细的指南对您有帮助!如果在操作过程中遇到任何问题,可以随时提出。