在 CentOS 7 上安装和配置 Nginx:完整分步指南
Nginx 是世界上最强大和应用最广泛的开源网络服务器之一。Nginx 以其卓越的性能、低内存占用和处理数千个并发连接的能力而闻名,是提供静态内容、充当反向代理和在分布式系统中执行负载均衡的首选解决方案。
无论您运行个人博客、高流量电子商务平台还是复杂的微服务架构,Nginx 都能提供用户所需的速度和可靠性。本综合指南将引导您完成在 CentOS 7 服务器上安装、配置、保护和优化 Nginx 的每一步——从初始系统准备到使用免费的 Let’s Encrypt SSL 证书启用 HTTPS。
> 前置条件:一台具有 root 或 sudo 访问权限的 CentOS 7 服务器。如果您需要一个可靠的高性能环境来跟随本指南,请考虑探索 AlexHost 的 VPS Hosting ——专为要求苛刻的工作负载而构建,具有完整的 root 访问权限和 SSD 存储。
第 1 步:更新您的系统
在安装任何新软件之前,确保您的 CentOS 7 系统完全是最新的至关重要。过时的软件包可能会引入安全漏洞和依赖冲突,使安装过程变得复杂。
打开您的终端并运行以下命令:
sudo yum update -y此命令将所有已安装的软件包更新到其最新可用版本。-y 标志自动确认所有提示,使该过程非交互式。在继续之前,请允许更新完全完成。
第 2 步:通过 YUM 安装 Nginx
Nginx 在默认的 CentOS 7 基础存储库中不可用。您必须首先安装 EPEL(企业 Linux 额外软件包)存储库,它为基于 RHEL 的发行版提供了广泛的额外软件包。
安装 EPEL 存储库:
sudo yum install epel-release -y安装 Nginx:
sudo yum install nginx -y此命令下载并安装 Nginx 以及所有必需的依赖项。安装完成后,您可以使用以下命令验证已安装的版本:
nginx -v您应该看到类似的输出:
nginx version: nginx/1.20.x第3步:启动并启用Nginx服务
安装Nginx后,您需要启动该服务并将其配置为在服务器每次重启时自动启动。
启动Nginx服务:
sudo systemctl start nginx启用Nginx在启动时启动:
sudo systemctl enable nginx检查服务状态以确认其正在运行:
sudo systemctl status nginx您应该看到表示服务活跃(运行中)的输出:
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; ...)
Active: active (running) since ...如果服务启动失败,请查看/var/log/nginx/error.log处的错误日志以获取诊断信息。
第 4 步:配置防火墙
CentOS 7 使用 firewalld 作为其默认防火墙管理工具。默认情况下,HTTP(端口 80)和 HTTPS(端口 443)流量被阻止。您必须明确打开这些端口以允许网络流量到达您的 Nginx 服务器。
允许 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 都列出。如果您的服务器托管在外部防火墙或安全组后面(云提供商常见),请确保这些规则也已更新以允许端口 80 和 443 上的流量。
第 5 步:验证安装
要确认 Nginx 已正确安装并提供内容,请打开网络浏览器并导航到您服务器的公共 IP 地址:
http://your_server_ip您应该会看到 默认 Nginx 欢迎页面,其中显示消息 *"Welcome to nginx!"*。这确认了网络服务器正在运行并可从互联网访问。
如果您没有看到欢迎页面,请仔细检查以下内容:
- Nginx 服务正在运行 (
sudo systemctl status nginx) - 防火墙规则已正确应用
- 您的服务器 IP 地址正确
- 没有其他服务(如 Apache)占用端口 80
第6步:配置Nginx服务器块
Nginx使用服务器块(功能上等同于Apache的虚拟主机)来定义它如何处理不同域名或子域名的请求。每个服务器块通常作为一个单独的配置文件存储在/etc/nginx/conf.d/目录中。
主Nginx配置文件位于/etc/nginx/nginx.conf。它包含一个指令,该指令自动加载来自conf.d目录的所有.conf文件,使您的配置保持模块化和易于管理。
第6a步:创建新的服务器块配置文件
为您的域名创建一个新的配置文件。将example.com替换为您的实际域名:
sudo nano /etc/nginx/conf.d/example.com.conf添加以下服务器块配置:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm index.php;
# Logging
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location / {
try_files $uri $uri/ =404;
}
# Deny access to hidden files
location ~ /. {
deny all;
}
}关键指令说明:
| 指令 | 描述 |
|---|---|
listen 80 | 指示Nginx在端口80(HTTP)上监听传入连接 |
server_name | 定义此服务器块响应的域名 |
root | 指定存储网站文件的文档根目录 |
index | 定义当请求目录时Nginx将提供的默认文件 |
try_files | 尝试将请求的URI作为文件提供,然后作为目录提供,如果都不存在则返回404 |
access_log / error_log | 为此虚拟主机定义单独的日志文件,便于调试 |
保存文件并退出编辑器(Ctrl+X,然后Y,然后在nano中Enter)。
第 7 步:创建文档根目录和测试文件
创建您在服务器块配置中定义的文档根目录:
sudo mkdir -p /var/www/example.com/html创建一个简单的 index.html 文件来验证服务器块是否正常工作:
echo "<h1>Welcome to Example.com — Powered by Nginx on CentOS 7!</h1>" | sudo tee /var/www/example.com/html/index.html设置正确的所有权和权限,以便 Nginx 可以读取文件:
sudo chown -R nginx:nginx /var/www/example.com/
sudo chmod -R 755 /var/www/example.com/> SELinux 注意事项:CentOS 7 默认启用 SELinux。如果即使设置了正确的权限 Nginx 仍无法读取您的网络文件,您可能需要应用适当的 SELinux 上下文:
> “`bash
> sudo chcon -Rt httpd_sys_content_t /var/www/example.com/
> “`
第 8 步:测试 Nginx 配置
在重新启动 Nginx 以应用新配置之前,始终要测试语法错误。配置错误的文件可能会导致整个 Web 服务器瘫痪。
运行配置测试:
sudo nginx -t成功的测试会产生以下输出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful如果报告了错误,请仔细查看配置文件中指示的行号,并在继续之前纠正任何问题。
重新启动 Nginx 以应用更改:
sudo systemctl restart nginx或者,如果您想在不中断活动连接的情况下重新加载配置(建议用于生产环境),请使用:
sudo systemctl reload nginx现在在浏览器中导航到您的域。您应该看到您的自定义 index.html 页面。
第9步:使用Let’s Encrypt设置HTTPS
在纯HTTP上运行网站会使您的用户面临潜在的窃听和中间人攻击。使用HTTPS保护您的网站不再是可选的——它是用户信任、数据完整性和搜索引擎排名的基本要求。
Let’s Encrypt提供免费、自动化和受信任的SSL/TLS证书。您也可以从AlexHost探索高级SSL证书,提供扩展验证和组织验证选项,为商业网站提供更高级别的信任。
安装Certbot和Nginx插件
sudo yum install certbot python2-certbot-nginx -y获取并安装SSL证书
使用--nginx插件运行Certbot,它会自动修改您的Nginx配置以启用HTTPS:
sudo certbot --nginx -d example.com -d www.example.com按照交互式提示进行操作:
- 输入您的电子邮件地址以接收续期通知
- 同意Let’s Encrypt服务条款
- 选择是否将HTTP流量重定向到HTTPS(强烈推荐——选择选项2)
Certbot将自动:
- 从Let’s Encrypt获取签名证书
- 修改您的
/etc/nginx/conf.d/example.com.conf以包含SSL指令 - 配置HTTP到HTTPS重定向
完成后,通过访问以下地址验证HTTPS配置:
https://example.com您的浏览器应该显示一个挂锁图标,确认连接已加密。
第 10 步:自动化证书续期
Let's Encrypt 证书的有效期为 90 天。如果未在过期前续期,您的网站将向访客显示安全警告,严重影响用户信任和流量。
测试续期流程
在设置自动化之前,请验证续期流程是否正常工作:
sudo certbot renew --dry-run成功的模拟运行确认自动续期将正常工作。
设置 Cron 任务以实现自动续期
打开 root crontab:
sudo crontab -e添加以下行以每天检查和续期证书两次(推荐频率):
0 0,12 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"Cron 计划说明:
0 0,12 * * * — 每天午夜和正午运行
--quiet — 除非发生错误,否则禁止输出
--post-hook "systemctl reload nginx" — 在成功续期后重新加载 Nginx,以应用新证书而不会导致停机
保存并退出 crontab 编辑器。您的 SSL 证书现在将自动续期,无需任何手动干预即可保持网站安全。
Nginx 在 CentOS 7 上的性能优化技巧
基本设置完成后,请考虑这些配置增强功能以最大化 Nginx 性能:
启用 Gzip 压缩
将以下内容添加到 nginx.conf 中的 http {} 块以减少发送给客户端的响应大小:
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
配置浏览器缓存
为静态资产添加缓存控制标头以减少服务器负载并改善页面加载时间:
location ~* .(jpg|jpeg|png|gif|ico|css|js|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
调整工作进程
在 /etc/nginx/nginx.conf 中,将工作进程数设置为与服务器的 CPU 核心数匹配:
worker_processes auto;
worker_connections 1024;
> 对于资源密集型应用程序或高流量网站,请考虑升级到来自 AlexHost 的专用服务器,它们提供有保证的 CPU、RAM 和存储资源,没有邻近噪声影响。
使用 Nginx 管理多个网站
Nginx 的最大优势之一是能够通过服务器块在单个服务器上托管多个网站。对于每个额外的域,只需:
在 /etc/nginx/conf.d/ 中创建一个新的 .conf 文件
定义一个唯一的 server_name 指令
将 root 指令指向适当的文档根目录
运行 sudo nginx -t 和 sudo systemctl reload nginx如果您更喜欢用图形界面来管理您的网络服务器、虚拟主机、数据库和电子邮件账户,请考虑 VPS with cPanel — 一个完全托管的控制面板解决方案,可以简化服务器管理而不牺牲灵活性。
或者,探索 AlexHost 提供的完整 VPS 控制面板 范围,包括 Plesk、DirectAdmin 和其他适合不同工作流程和技术偏好的选项。
CentOS 7 上 Nginx 常见问题排查
| 问题 | 可能原因 | 解决方案 | |
|---|---|---|---|
| Nginx 启动失败 | 端口 80/443 已被占用 | 运行 `sudo ss -tlnp | grep :80` 来识别冲突的进程 |
| 403 禁止访问错误 | 文件权限不正确或 SELinux 上下文错误 | 检查 chmod/chown 并应用 chcon 来处理 SELinux | |
| 502 网关错误 | 上游后端(PHP-FPM、Node.js)未运行 | 验证后端服务是否活跃以及 socket/端口是否正确 | |
| SSL 证书未自动续期 | Certbot 无法绑定到端口 80 | 确保端口 80 开放且没有其他进程阻止它 | |
| 更改未生效 | 配置未重新加载 | 在每次配置更改后运行 sudo systemctl reload nginx |
结论
您已成功在 CentOS 7 上安装、配置和保护了 Nginx。您的服务器已准备好以高性能托管网站、高效处理并发连接,并通过加密的 HTTPS 连接提供内容——这些都是现代生产级网络环境的必要特性。
以下是所完成工作的总结:
- ✅ 更新了 CentOS 7 系统并通过 EPEL 存储库安装了 Nginx
- ✅ 启动并启用了 Nginx 服务以在启动时自动启动
- ✅ 配置了 firewalld 以允许 HTTP 和 HTTPS 流量
- ✅ 为域创建并配置了自定义服务器块
- ✅ 为文档根目录设置了正确的文件权限和 SELinux 上下文
- ✅ 在应用更改前测试了配置的语法错误
- ✅ 通过 Certbot 使用免费的 Let’s Encrypt SSL 证书保护了网站
- ✅ 使用 cron 作业自动化了证书续期
维护安全且高性能的网络服务器需要持续关注。定期更新 Nginx,监控您的访问和错误日志,并随着网站需求的发展审查您的配置。
如果您正在为 Nginx 驱动的项目寻找强大的托管基础,AlexHost 提供全面的解决方案——从针对较小网站的入门级共享网络托管到用于要求苛刻的应用程序的高性能 VPS 和专用基础设施。每个计划都由企业级硬件、24/7 技术支持以及对正常运行时间和安全性的承诺提供支持。
