嘿,朋友。欢迎来到服务器管理的奇妙世界。我知道你此刻可能正盯着屏幕上那个空荡荡的终端窗口发呆,手里攥着刚买的云服务器凭证,心里既兴奋又有点发虚:“这玩意儿真的能跑起来吗?会不会点错一个键,我的网站就再也打不开了?”
别担心,这种感觉我太熟悉了。就在几年前,我也曾因为一行错误的 rm -rf 命令哭过鼻子(当然,那是本地虚拟机,有快照兜底)。但今天我们要聊的主角是 AlmaLinux——它是 CentOS 精神续作中的佼佼者,稳定、安全、且完全免费。对于想要搭建 Web 服务器(无论是跑 WordPress、Node.js 应用还是简单的静态页面)的新手来说,它简直就是为“稳定”二字而生的。
这篇指南不会把你扔进枯燥的技术文档海洋里。我会带你一步步走,就像我在旁边握着你的手一样。我们会避开那些让新手崩溃的坑,比如 SELinux 的刁难、防火墙的误杀,以及权限管理的混乱。准备好了吗?让我们开始这场从零到一的构建之旅。
第一步:选对起点,别让“基础”成为噩梦
很多新手上来就去下载 ISO 镜像,然后尝试在本地烧录 U 盘安装。停! 除非你是为了学习底层硬件交互,否则在云服务器上,请直接使用云厂商提供的 “最小化安装” 或 “Minimal” 镜像。
为什么?因为 AlmaLinux 的核心魅力在于“纯净”。云厂商预装的桌面环境不仅占用了宝贵的内存和 CPU 资源,还引入了大量你可能永远用不到的服务,这些都是潜在的安全漏洞。
当你通过 SSH(推荐使用 VS Code 的 Remote-SSH 插件,或者 Termius)连接到你的服务器时,你会看到类似这样的提示符:
[ec2-user@ip-172-31-xx-xx ~]$
注意看,默认用户通常不是 root。这是个好习惯!但在接下来的配置中,我们需要临时获取超级管理员权限。请记住这个原则:能用普通用户做的事,绝不用 root。但在初始配置阶段,为了效率,我们会频繁使用 sudo。
第二步:系统更新与基础环境打磨
拿到服务器后的第一件事,不是装 Nginx,也不是装 PHP,而是更新系统。这不仅是修复已知漏洞,更是为了确保你安装的软件包版本是最新的,避免因为依赖冲突导致后续安装失败。
打开你的终端,输入以下命令:
# 刷新软件源缓存
sudo dnf makecache
# 升级所有已安装的软件包
sudo dnf update -y
这里有个小细节:dnf 是 AlmaLinux(以及 RHEL/CentOS 8+)默认的包管理器,它比旧版的 yum 更快、更智能。-y 参数表示自动确认,省去你每次按 y 的麻烦。
更新完成后,建议重启一次服务器,以确保内核更新生效:
sudo reboot
等待几分钟,重新连接 SSH。这时候,你的系统已经是一个“干净且最新”的 AlmaLinux 环境了。
第三步:解开 SELinux 的枷锁(新手最大痛点)
如果说 Linux 世界里有一个让新手抓狂的“守门员”,那一定是 SELinux (Security-Enhanced Linux)。它默认处于“Enforcing”(强制)模式,任何不符合策略的行为都会被拦截。
对于 Web 服务器来说,这意味着:你想把网页文件放在 /var/www/html,但如果你的 PHP 脚本试图读取其他目录的文件,SELinux 可能会直接拒绝,而且报错信息往往晦涩难懂,让你怀疑人生。
避坑指南:
虽然从安全角度讲,保持 SELinux 开启是最佳实践,但对于新手快速搭建环境,我建议暂时将其设置为 Permissive(宽容)模式。这样,违规操作只会记录日志,不会阻断服务,方便你排查问题。等你熟悉流程后,再考虑是否开启。
执行以下命令:
# 查看当前状态
sestatus
# 临时设置为宽容模式(立即生效,重启失效)
sudo setenforce 0
# 永久修改配置文件,确保重启后依然有效
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
再次检查状态,你应该看到 Current mode: permissive。这就舒服多了,对吧?
第四步:打开大门,配置防火墙
服务器就像一栋房子,防火墙就是门卫。AlmaLinux 默认使用 firewalld 作为防火墙管理工具。如果你不配置它,外部请求根本进不来,你的网站自然无法访问。
我们需要开放两个端口:
- 80: HTTP 流量
- 443: HTTPS 流量(如果你打算申请 SSL 证书)
运行以下命令:
# 重载防火墙规则,确保之前的设置生效
sudo firewall-cmd --reload
# 永久开放 HTTP 服务
sudo firewall-cmd --permanent --add-service=http
# 永久开放 HTTPS 服务
sudo firewall-cmd --permanent --add-service=https
# 再次重载以应用更改
sudo firewall-cmd --reload
# 验证是否成功
sudo firewall-cmd --list-all
在输出结果中,你应该能在 services: 行看到 http https。这时候,你可以试着在浏览器输入服务器的公网 IP,如果看到“Test Page for Apache/Nginx”之类的默认页面,说明网络通路已经打通!
第五步:构建 LEMP 栈——选择 Nginx 而非 Apache
虽然 Apache 也很流行,但我强烈建议新手使用 Nginx。为什么?
- 性能更好:在处理高并发连接时,Nginx 的资源占用远低于 Apache。
- 配置更简洁:Nginx 的配置文件结构清晰,容易理解。
- 现代 Web 开发标配:无论是 Node.js 反向代理,还是 PHP-FPM,Nginx 都是首选搭档。
我们将一起搭建 LEMP 架构:Linux (AlmaLinux), Engine-x (Nginx), MySQL (MariaDB), PHP。
1. 安装 Nginx
sudo dnf install nginx -y
安装完成后,启动服务并设置为开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
2. 安装 MariaDB (MySQL 的替代品)
在 RHEL 系发行版中,MariaDB 是 MySQL 的完美开源替代品,兼容性极佳。
sudo dnf install mariadb-server mariadb -y
sudo systemctl start mariadb
sudo systemctl enable mariadb
关键步骤:数据库安全初始化
千万不要跳过这一步!默认的数据库安装非常不安全,没有密码,任何人都能连进去。
sudo mysql_secure_installation
按照提示操作:
- Enter current password for root: 直接回车(默认无密码)。
- Set root password? [Y/n]: 输入
y,然后设置一个强密码。 - Remove anonymous users? [Y/n]: 输入
y。 - Disallow root login remotely? [Y/n]: 输入
y(禁止远程 root 登录,安全第一)。 - Remove test database and access to it? [Y/n]: 输入
y。 - Reload privilege tables now? [Y/n]: 输入
y。
搞定!现在你的数据库是安全的了。
3. 安装 PHP
AlmaLinux 默认仓库里的 PHP 版本可能不是最新的。为了获得更好的性能和安全性,我们添加 Remi 仓库来安装较新的 PHP 版本(例如 PHP 8.2 或 8.3)。
首先启用 Remi 仓库:
sudo dnf install epel-release -y
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm -y
然后,重置 PHP 模块流,选择你想要的版本:
# 查看可用的 PHP 模块
sudo dnf module list php
# 假设我们要安装 PHP 8.2,执行以下命令
sudo dnf module reset php -y
sudo dnf module enable php:remi-8.2 -y
sudo dnf install php php-fpm php-mysqlnd php-gd php-mbstring php-intl php-json php-opcache -y
这里安装的包包括:
php-fpm: PHP FastCGI 进程管理器,Nginx 需要通过它与 PHP 通信。php-mysqlnd: 让 PHP 能连接 MariaDB。php-gd,php-mbstring,php-intl: 处理图片、多语言支持和国际化,WordPress 等 CMS 常用。
启动 PHP-FPM:
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
第六步:让 Nginx 和 PHP 牵手成功
现在,Nginx 和 PHP 都装好了,但它们还没“认识”对方。我们需要配置 Nginx,告诉它:“当有人请求 .php 文件时,请把任务交给 PHP-FPM 处理。”
编辑 Nginx 的默认站点配置文件:
sudo nano /etc/nginx/conf.d/default.conf
找到 server 块,修改如下内容(重点看注释部分):
server {
listen 80;
listen [::]:80;
server_name _; # 或者填写你的域名,如 example.com
root /usr/share/nginx/html;
index index.php index.html index.htm; # 加上 index.php
location / {
try_files $uri $uri/ =404;
}
# 新增:PHP 处理配置
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock; # 注意:这里指向 socket 文件
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# 安全检查:防止路径遍历攻击
try_files $uri =404;
}
}
保存并退出(在 Nano 中按 Ctrl+O 回车保存,Ctrl+X 退出)。
测试配置并重载 Nginx:
# 测试配置文件语法是否正确
sudo nginx -t
# 如果显示 "syntax is ok" 和 "test is successful",则重载
sudo systemctl reload nginx
第七步:验证成果——编写第一个 PHP 文件
是时候检验我们的劳动成果了。让我们创建一个简单的 PHP 文件,看看 Nginx 是否能正确解析它。
# 进入 Nginx 默认根目录
cd /usr/share/nginx/html
# 备份默认首页(可选)
sudo mv index.html index.html.bak
# 创建新的 index.php
sudo nano index.php
输入以下内容:
<?php
phpinfo();
?>
保存退出。现在,打开浏览器,访问 http://你的服务器IP。
如果你看到一个布满表格的页面,详细列出了 PHP 的配置信息、版本、加载的模块等,那么恭喜你!你的 LEMP 环境搭建成功了! 🎉
第八步:安全加固与进阶优化
环境跑起来了,但这只是开始。为了让服务器真正适合生产环境,我们需要做一些额外的加固工作。
1. 禁用不必要的服务
检查有哪些服务在运行,关掉那些你不需要的:
systemctl list-unit-files --type=service --state=enabled
例如,如果你不需要邮件服务器,可以停止 postfix。
2. 配置 Fail2Ban 防暴力破解
Fail2Ban 会监控日志文件,如果发现某个 IP 多次尝试错误登录(如 SSH 或 Nginx),就会自动将其加入防火墙黑名单。
sudo dnf install fail2ban -y
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
创建自定义过滤器保护 Nginx:
sudo nano /etc/fail2ban/jail.local
添加以下内容:
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
[nginx-botsearch]
enabled = true
port = http,https
filter = nginx-botsearch
logpath = /var/log/nginx/access.log
maxretry = 2
重启 Fail2Ban 使配置生效:
sudo systemctl restart fail2ban
3. 设置 Swap 交换空间
云服务器通常内存较小,如果运行大型应用(如 Java 或大量并发 MySQL 查询),可能会 OOM (Out of Memory)。添加 Swap 可以作为缓冲。
# 创建 2GB 的 swap 文件
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
# 设置权限
sudo chmod 600 /swapfile
# 格式化为 swap
sudo mkswap /swapfile
# 启用 swap
sudo swapon /swapfile
# 永久生效
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
第九步:给你的网站穿上“HTTPS”外套
在现代互联网,HTTP 是不安全的。浏览器会标记 HTTP 网站为“不安全”。使用 Let’s Encrypt 提供的免费 SSL 证书是最简单的方式。
安装 Certbot:
sudo dnf install certbot python3-certbot-nginx -y
获取并安装证书(假设你的域名是 example.com,并确保 DNS 已指向服务器 IP):
sudo certbot --nginx -d example.com -d www.example.com
Certbot 会自动修改 Nginx 配置,重定向 HTTP 到 HTTPS,并配置证书路径。它会问你希望如何重定向,选择 Redirect 即可。
结语:这只是旅程的开始
看着浏览器中那个绿色的锁标志,听着服务器风扇轻微的嗡嗡声,那种成就感是无与伦比的。你不仅仅是在运行代码,你是在搭建一个属于自己的数字领地。
当然,服务器管理是一场马拉松,而不是短跑。接下来你可能会遇到:
- 数据库备份:使用
mysqldump定时备份。 - 日志监控:学会查看
/var/log/nginx/和/var/log/mariadb/。 - 性能调优:随着访问量增加,调整 Nginx worker 数量和 PHP-FPM 池大小。
但这一切都建立在今天这个稳固的基础之上。不要害怕犯错,每一次报错都是学习的机会。如果在过程中遇到了具体的错误代码,别慌,把错误信息复制到搜索引擎里,或者回来问我。
记住,最强大的模型不是 AI,而是那个敢于动手、不断试错的你自己。现在,去探索吧,你的 Web 服务器正在等着被你赋予生命。
