CentOS 7 上安装和配置 Nginx 完整教程

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

centos7 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。

centos7 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 端口。

centos7 nginx 教程
(图片来源网络,侵删)
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 结尾的文件。
  • 网站根目录: /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,然后按 YEnter 保存并退出。

步骤 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

按照提示操作:

  1. 输入您的电子邮箱地址。
  2. 阅读并同意服务条款。
  3. 选择是否将非流量重定向到 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 用户,并且权限设置正确 (755644)。
    • 解决: 检查目录和文件权限,确保 nginx 用户有读取和执行权限。
  • 问题: 404 Not Found

    • 原因: 请求的文件或路径不存在,或者 root 指令配置错误。
    • 解决: 检查 location 块中的 root 路径是否正确,以及文件是否存在于指定位置。

恭喜!您已经成功完成了在 CentOS 7 上安装、配置和管理 Nginx 的全过程,您现在拥有一个可以托管多个网站、支持 HTTPS 的高性能 Web 服务器,您可以深入学习 Nginx 的高级配置,如负载均衡、反向代理、Gzip 压缩等,以充分发挥其强大的功能。