新手如何在CentOS Stream 9上安装和配置Web服务?

在 CentOS Stream 9 上搭建 Web 服务,核心思路与传统的 CentOS 7/8 或 Ubuntu 有显著不同。主要区别在于:默认包管理器从 yum 变为 dnf,且 Firewalld 和 SELinux 的策略更加严格。

作为新手,最稳妥、最易维护的方案是使用 Nginx + PHP (FPM) 或 Apache (httpd)。鉴于 Nginx 在高并发场景下的优势及国内主流云厂商的推荐配置习惯,以下以 Nginx 为例,提供一套标准、合规的生产环境配置流程。


一、前置准备:系统初始化与安全基线

  1. 更新系统

    sudo dnf update -y
  2. 配置防火墙(Firewalld)
    CentOS Stream 9 默认启用 firewalld。需开放 HTTP (80) 和 HTTPS (443) 端口:

    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --permanent --add-service=https
    sudo firewall-cmd --reload
  3. SELinux 处理建议

    • 生产环境:不建议直接禁用 SELinux。应学习使用 semanage fcontext 和 restorecon 正确设置上下文。
    • 新手测试环境:可临时设为 permissive 模式避免权限报错:
      sudo setenforce 0
      sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

二、安装 Nginx

CentOS Stream 9 的 AppStream 仓库中已包含稳定版 Nginx。

sudo dnf install nginx -y

启动并设置开机自启:

sudo systemctl enable nginx --now

验证安装:

curl http://localhost
# 应返回 HTML 页面内容

注意:不要随意添加第三方 EPEL 或 Remi 仓库除非必要,官方仓库版本经过充分测试,稳定性更高。


三、安装 PHP(以 PHP-FPM 为例)

Web 服务器需要动态内容时,通常通过 FastCGI 协议与 PHP-FPM 通信。

1. 安装 PHP 及相关模块

根据需求选择版本(当前最新稳定为 PHP 8.2 或 8.3)。此处以通用模块为例:

sudo dnf install php php-fpm php-mysqlnd php-gd php-mbstring php-xml php-json -y

2. 启动 PHP-FPM

sudo systemctl enable php-fpm --now

3. 关键配置:修改用户组

默认情况下,Nginx 运行用户是 nginx,PHP-FPM 运行用户是 apache(在某些发行版中)或 php-fpm。必须确保两者能协同工作。

编辑 /etc/php-fpm.d/www.conf:

user = nginx
group = nginx

重启 PHP-FPM 使配置生效:

sudo systemctl restart php-fpm

为什么改为用户 nginx?
因为 Nginx 需要以相同用户身份访问 PHP-FPM 的 socket 文件,避免权限拒绝(Permission Denied)。


四、配置 Nginx 虚拟主机(Virtual Host)

创建站点目录和配置文件:

1. 创建网站根目录

sudo mkdir -p /var/www/html/example.com/public_html
sudo chown -R nginx:nginx /var/www/html/example.com
sudo chmod -R 755 /var/www/html/example.com

2. 编写测试文件

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/example.com/public_html/index.php

3. 创建 Nginx 配置文件

新建 /etc/nginx/conf.d/example.com.conf:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/html/example.com/public_html;
    index index.php index.html;

    # 日志路径
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    # 静态资源缓存
    location ~* .(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    # PHP 处理
    location ~ .php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php-fpm/www.sock;  # 注意:此路径可能与你的系统略有差异
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 禁止访问隐藏文件
    location ~ /. {
        deny all;
    }
}

4. 测试配置并重载 Nginx

sudo nginx -t
sudo systemctl reload nginx

五、验证与服务管理

  1. 浏览器访问
    打开 http://your_server_ip/index.php,应显示 PHP 信息页。

  2. 常用命令速查

    # 查看服务状态
    systemctl status nginx
    systemctl status php-fpm
    
    # 查看日志(排查问题必备)
    tail -f /var/log/nginx/error.log
    journalctl -u php-fpm -f
  3. 安全加固建议

    • 禁用危险函数:在 php.ini 中注释掉 disable_functions 中的高危函数(如 exec, shell_exec, system 等)。
    • 限制上传大小:调整 upload_max_filesize 和 post_max_size。
    • HTTP 强制跳转 HTTPS:若后续配置 SSL,可在 Nginx 中添加 return 301 https://$host$request_uri;。

六、常见问题与排错指南

现象 可能原因 解决方案
403 Forbidden 权限错误 检查 chown -R nginx:nginx /var/www;确认 SELinux 未阻止
502 Bad Gateway PHP-FPM 未启动或连接失败 检查 php-fpm.service 状态;确认 fastcgi_pass 指向正确的 socket
空白页 PHP 解析失败 检查 Nginx 配置中 location ~ .php$ 是否正确包含 fastcgi_params
无法访问网络 防火墙/安全组 检查云服务器控制台的安全组规则是否放行 80/443 端口

七、进阶建议(面向生产环境)

  1. 使用 Let’s Encrypt 免费 SSL 证书
    安装 certbot 自动签发证书,实现 HTTPS:

    sudo dnf install certbot python3-certbot-nginx -y
    sudo certbot --nginx -d example.com
  2. 考虑使用容器化部署
    对于新项目,推荐使用 Docker + Docker Compose 部署 LEMP/LAMP 栈,便于迁移和环境一致性。

  3. 备份策略
    定期备份数据库和网站文件至对象存储(如阿里云 OSS、腾讯云 COS),避免单点故障。


总结

在 CentOS Stream 9 上搭建 Web 服务的核心要点是:

  • 使用 dnf 而非 yum
  • 正确处理 Firewalld 和 SELinux 权限
  • 统一 Nginx 与 PHP-FPM 的运行用户
  • 规范配置 虚拟主机 和 PHP 解析块

遵循上述步骤,即可构建一个稳定、安全的 Web 服务基础架构。如需进一步优化性能或安全性,可结合 CDN、WAF 及监控工具进行扩展。

未经允许不得转载:CLOUD云枢 » 新手如何在CentOS Stream 9上安装和配置Web服务?