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

- Nginx:作为高性能的 Web 服务器和反向代理。
- MariaDB:作为流行的 MySQL 数据库服务器(CentOS 官方推荐)。
- PHP:作为服务器端脚本语言,用于处理动态网页内容。
- Firewalld 和 SELinux:用于系统安全防护。
第一步:准备工作
在开始之前,请确保您已经完成了以下准备工作:
- 一台干净的 CentOS 服务器:可以是实体机、虚拟机或云服务器(如阿里云、腾讯云、AWS 等),本教程以 CentOS 7 为例,CentOS 8 的操作基本一致。
- 服务器访问权限:拥有服务器的
root权限,或者一个具有sudo权限的普通用户。 - 基本网络连接:确保服务器可以连接到互联网。
第二步:更新系统
登录到您的服务器(通过 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 的交互式过程中,建议:
- 为 root 用户设置一个强密码。
- 其他问题(如移除匿名用户、禁止 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 处理。
-
备份默认配置文件
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
-
编辑主配置文件
vim /etc/nginx/nginx.conf
在
http块中,确保有include /etc/nginx/conf.d/*.conf;这一行,我们通常在conf.d目录下创建站点配置。 -
创建网站配置文件 我们为
example.com创建一个虚拟主机配置文件。vim /etc/nginx/conf.d/your_website.conf
粘贴进去,并替换
your_server_ip和your_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; } } -
测试并重载 Nginx 配置
# 测试 Nginx 配置文件语法是否正确 nginx -t # 如果测试通过,重载 Nginx 配置以应用更改 systemctl reload nginx
第八步:创建一个测试 PHP 页面
为了验证 Nginx 和 PHP 是否能正常协同工作,我们创建一个简单的 PHP 信息页面。
-
创建 PHP 文件
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
注意:我们之前已经用
semanage命令设置了/var/www/html目录的 SELinux 上下文,所以这里 PHP-FPM 应该有权限读取它。 -
设置文件权限
# 确保 Nginx 用户(通常是 nginx)有读取权限 chown -R nginx:nginx /var/www/html/
-
在浏览器中测试 打开浏览器,访问
http://your_server_ip/info.php,如果看到一个包含详细 PHP 配置信息的页面,说明您的 LEMP 环境已经成功搭建!
重要:出于安全考虑,测试完成后请立即删除 info.php 文件。
rm /var/www/html/info.php
第九步:部署您的网站
基础环境已经就绪,您可以开始部署您的网站了:
- 上传网站文件:使用
scp、rsync或 FTP/SFTP 工具,将您的网站代码(如 WordPress, Drupal, 或自定义项目)上传到/var/www/html/目录。 - 创建数据库:登录到 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;
- 配置网站:根据您网站程序的要求(如 WordPress 的
wp-config.php),填写数据库信息。 - 设置正确的文件权限:这是最常见的问题之一,确保 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 压缩等。
- 定期备份:制定并执行网站文件和数据库的备份策略。
希望这份详细的指南对您有帮助!如果在操作过程中遇到任何问题,可以随时提出。
