CentOS 7 上安装和配置 Nginx 完整教程
Nginx 是一个高性能、轻量级的 Web 服务器和反向代理服务器,在全球范围内被广泛使用,本教程将引导您在 CentOS 7 系统上完成 Nginx 的安装、配置和基本管理。

第一部分:安装 Nginx
在安装之前,建议将您的系统更新到最新状态。
步骤 1: 更新系统
打开终端,运行以下命令更新所有已安装的软件包:
sudo yum update -y
步骤 2: 添加 EPEL 仓库
EPEL (Extra Packages for Enterprise Linux) 是一个为 RHEL 和衍生版(如 CentOS)提供高质量附加软件包的项目,Nginx 在官方的 CentOS 7 仓库中版本可能较旧,因此我们推荐从 EPEL 安装。
sudo yum install epel-release -y
步骤 3: 安装 Nginx
EPEL 仓库已经添加,您可以使用 yum 命令轻松安装 Nginx。

sudo yum install nginx -y
安装完成后,Nginx 的服务文件、主配置文件和网站根目录都会被创建在标准位置。
第二部分:配置防火墙
Nginx 默认使用 80 (HTTP) 和 443 (HTTPS) 端口,为了能从外部访问网页,您需要确保防火墙允许这些端口的流量。
步骤 1: 检查防火墙状态并启用永久端口
使用 firewall-cmd 命令来管理防火墙。
# 检查防火墙是否运行 sudo systemctl status firewalld # 如果未运行,请启动并设置为开机自启 sudo systemctl start firewalld sudo systemctl enable firewalld
步骤 2: 添加 Nginx 服务规则
最简单的方法是直接添加 nginx 服务到防火墙规则中,这会自动开放 80 和 443 端口。

sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https
步骤 3: 重新加载防火墙配置
添加规则后,必须重新加载防火墙才能使配置生效。
sudo firewall-cmd --reload
您应该可以成功访问 Nginx 的默认欢迎页面了。
第三部分:启动并启用 Nginx
安装和配置好防火墙后,让我们启动 Nginx 服务并确保它在系统重启后自动运行。
步骤 1: 启动 Nginx
sudo systemctl start nginx
步骤 2: 设置开机自启
sudo systemctl enable nginx
步骤 3: 检查 Nginx 状态
sudo systemctl status nginx
如果看到 active (running),则表示 Nginx 已成功启动。
步骤 4: 测试安装
在浏览器中输入您的服务器 IP 地址:
http://your_server_ip
如果您看到 Nginx 的欢迎页面,恭喜您,Nginx 已成功安装并运行!
第四部分:Nginx 目录结构了解
为了更好地配置 Nginx,您需要了解其核心目录和文件的位置:
- 主配置文件:
/etc/nginx/nginx.conf这是 Nginx 的核心配置文件,可以在这里定义全局设置、包含其他配置文件等。
- 服务器块配置目录:
/etc/nginx/conf.d/- 所有独立的网站(虚拟主机)配置文件都应放在这里,默认情况下,Nginx 会自动加载此目录下所有以
.conf结尾的文件。
- 所有独立的网站(虚拟主机)配置文件都应放在这里,默认情况下,Nginx 会自动加载此目录下所有以
- 网站根目录:
/usr/share/nginx/html/这是 Nginx 默认存放网站文件的地方,您创建的每个网站都可以有自己的根目录。
- 日志文件目录:
/var/log/nginx/access.log: 记录所有客户端访问请求。error.log: 记录 Nginx 运行时产生的错误信息。
第五部分:创建第一个虚拟主机(网站)
虚拟主机允许您在一台服务器上托管多个网站,下面我们创建一个名为 example.com 的虚拟主机。
步骤 1: 创建网站目录
为您的网站创建一个目录,并将其所有者设置为 nginx 用户。
sudo mkdir -p /var/www/example.com/html sudo chown -R nginx:nginx /var/www/example.com/html sudo chmod -R 755 /var/www/example.com/html
步骤 2: 创建测试页面
在网站根目录下创建一个 index.html 文件。
sudo nano /var/www/example.com/html/index.html
粘贴到文件中并保存:
<!DOCTYPE html>
<html>
<head>Welcome to example.com!</title>
</head>
<body>
<h1>Success! Your example.com server block is working!</h1>
</body>
</html>
提示: 使用
nano编辑器,按Ctrl+X,然后按Y和Enter保存并退出。
步骤 3: 创建服务器块配置文件
在 /etc/nginx/conf.d/ 目录下创建一个新的配置文件。
sudo nano /etc/nginx/conf.d/example.com.conf
将以下配置粘贴到文件中,请务必将 server_name 修改为您的域名。
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
步骤 4: 测试 Nginx 配置
在重新加载 Nginx 之前,务必测试配置文件是否有语法错误。
sudo nginx -t
如果看到以下输出,说明配置正确:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
如果出现错误,请返回检查您的配置文件。
步骤 5: 重新加载 Nginx
应用新的配置。
sudo systemctl reload nginx
步骤 6: 测试虚拟主机
在您的本地电脑的 hosts 文件中(Windows: C:\Windows\System32\drivers\etc\hosts, macOS/Linux: /etc/hosts)添加一行,将您的域名指向服务器的 IP 地址:
your_server_ip example.com www.example.com
保存后,在浏览器中访问 http://example.com,您应该能看到刚刚创建的 "Success!" 页面。
第六部分:安装 Let's Encrypt SSL 证书(HTTPS)
为您的网站启用 HTTPS 可以提高安全性,我们使用 Certbot 工具免费获取 Let's Encrypt 证书。
步骤 1: 安装 Certbot
sudo yum install certbot python2-certbot-nginx -y
步骤 2: 获取 SSL 证书
Certbot 可以自动检测 Nginx 配置并获取证书。
sudo certbot --nginx -d example.com -d www.example.com
按照提示操作:
- 输入您的电子邮箱地址。
- 阅读并同意服务条款。
- 选择是否将非流量重定向到
https(推荐选择2)。
如果成功,Certbot 会自动修改您的 Nginx 配置文件,启用 SSL,并设置自动续订。
步骤 3: 验证 HTTPS 访问
在浏览器中访问 https://example.com,您应该能看到一个带有安全锁标志的页面。
第七部分:Nginx 常用管理命令
记住这些命令,方便您日常管理 Nginx 服务。
- 启动 Nginx:
sudo systemctl start nginx
- 停止 Nginx:
sudo systemctl stop nginx
- 重启 Nginx (会中断所有连接):
sudo systemctl restart nginx
- 重新加载 Nginx (平滑应用新配置,不中断连接):
sudo systemctl reload nginx
- 禁用开机自启:
sudo systemctl disable nginx
- 启用开机自启:
sudo systemctl enable nginx
- 查看错误日志:
tail -f /var/log/nginx/error.log
- 查看访问日志:
tail -f /var/log/nginx/access.log
第八部分:排查常见问题
-
问题:
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)- 原因: 端口 80 已被其他程序占用(Apache 或另一个 Nginx 实例)。
- 解决: 找出占用端口的程序 (
sudo lsof -i :80) 并停止它,或者修改 Nginx 配置文件中的listen指令使用其他端口。
-
问题:
403 Forbidden- 原因: 通常是文件或目录的权限问题,确保网站目录的所有者是
nginx用户,并且权限设置正确 (755或644)。 - 解决: 检查目录和文件权限,确保
nginx用户有读取和执行权限。
- 原因: 通常是文件或目录的权限问题,确保网站目录的所有者是
-
问题:
404 Not Found- 原因: 请求的文件或路径不存在,或者
root指令配置错误。 - 解决: 检查
location块中的root路径是否正确,以及文件是否存在于指定位置。
- 原因: 请求的文件或路径不存在,或者
恭喜!您已经成功完成了在 CentOS 7 上安装、配置和管理 Nginx 的全过程,您现在拥有一个可以托管多个网站、支持 HTTPS 的高性能 Web 服务器,您可以深入学习 Nginx 的高级配置,如负载均衡、反向代理、Gzip 压缩等,以充分发挥其强大的功能。
