目录

CentOS-7-安装配置-Nginx-服务

CentOS 7 安装&配置 Nginx 服务

CentOS 7 安装&配置 Nginx 服务

本教程详细介绍了在 CentOS 7 上安装、配置及验证 Nginx 的标准流程,旨在帮助用户快速部署并运行一个 Web 服务器。

第一步:添加 EPEL 源

EPEL (Extra Packages for Enterprise Linux) 是一个由 Fedora 社区创建和维护的软件源,为 RHEL/CentOS 等企业级 Linux 发行版提供高质量的附加软件包。

sudo yum install epel-release

第二步:安装 Nginx

现在 EPEL 源已经可用,可以使用 yum命令安装 Nginx:

sudo yum install nginx

第三步:启动 Nginx 服务

安装完成后,使用以下命令启动 Nginx 服务:

sudo systemctl start nginx

第四步:设置 Nginx 开机自启 (可选)

如果希望在服务器重启后 Nginx 服务能够自动启动,可以运行以下命令:

sudo systemctl enable nginx

第五步:配置防火墙 (如果需要)

如果 CentOS 7 服务器开启了防火墙,需要允许 HTTP 和 HTTPS 流量,以便外部用户可以访问网站。

运行以下命令来开放 80 (HTTP) 和 443 (HTTPS) 端口:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

检查端口是否开放

可以使用以下命令来检查防火墙规则,确认端口是否已成功开放:

sudo firewall-cmd --list-all

执行此命令后,查看输出中的 services 部分。如果看到 httphttps,则表示端口已在防火墙中开放。

第六步:验证安装

有多种方法可以验证 Nginx 是否已成功安装并运行:

1. 检查 Nginx 服务状态

运行以下命令查看 Nginx 服务的状态:

sudo systemctl status nginx

如果 Nginx 正在运行,应该会看到 “active (running)” 的绿色字样。

2. 在浏览器中访问服务器 IP

  • 获取服务器 IP 地址:
    可以使用以下命令之一来获取服务器的 IP 地址:

    hostname -I

    或者

    ip addr show
  • 在浏览器中访问:
    打开网页浏览器,然后在地址栏中输入 http://<服务器IP地址>。如果看到 Nginx 的欢迎页面(通常会显示 “Welcome to nginx!”),则说明 Nginx 已成功安装并正在运行。

完成以上步骤后,Nginx 服务器就已经准备就绪了。

第七步:配置 Nginx 托管网站

当 Nginx 安装并运行后,可以将网站文件放置在 Nginx 的根目录中。对于管理单个网站,可以直接使用默认配置。但如果计划托管多个网站,最佳实践是为每个网站创建独立的配置文件。

场景一:托管单个网站 (使用默认配置)

  1. 默认根目录:
    在 CentOS 7 上,Nginx 的默认网站根目录通常是:

    /usr/share/nginx/html

    所看到的 “Welcome to nginx!” 欢迎页面就是由这个目录下的 index.html 文件生成的。

  2. 如何发布网站:
    可以直接将网站文件(例如 index.html, styles.css, scripts.js 等)上传或复制到 /usr/share/nginx/html 目录下,替换掉默认的欢迎页面。

  3. 如何查找或修改根目录:
    网站的根目录是在 Nginx 的配置文件中定义的。在标准的 CentOS 7 安装中,这个配置通常直接在主配置文件里。

    • 主配置文件:Nginx 的主配置文件位于 /etc/nginx/nginx.conf
    • 默认配置位置:打开该文件,会找到一个 http 块,其中包含一个默认的 server 块。这个 server 块定义了监听 80 端口的 Web 服务器的行为。

    一个典型的默认 server 块如下所示:

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html; # <--- 这里定义了网站的根目录
    
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
    
        error_page 404 /404.html;
        location = /404.html {
        }
    
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
    • 定位根目录:如上所示,root /usr/share/nginx/html; 这一行明确指定了网站文件的存放位置。
    • 关于 conf.d 目录:虽然 /etc/nginx/conf.d 目录在初始安装后可能是空的,但它是用来存放不同网站(虚拟主机)的独立配置文件的推荐位置。当需要托管多个网站时,可以在这里为每个网站创建一个 .conf 文件。我们将在下一个场景中详细介绍。

    如果想更改网站的根目录,可以修改 root 指令后面的路径,然后重新加载 Nginx 配置以使更改生效:

    sudo systemctl reload nginx

场景二:托管多个网站 (推荐)

为了更好地管理多个网站(也称为“虚拟主机”),推荐在 /etc/nginx/conf.d/ 目录下为每个网站创建一个独立的 .conf 配置文件。主配置文件 /etc/nginx/nginx.conf 默认会加载这个目录下的所有 .conf 文件。

以下是如何为新网站 my-example-site.com 创建配置的步骤:

1. 为网站创建根目录

首先,为新网站创建一个存放文件的目录。一个常见的做法是放在 /var/www/ 下:

sudo mkdir -p /var/www/my-example-site.com/html

2. 创建一个示例页面

在新目录中创建一个简单的 index.html 文件用于测试:

echo '<h1>欢迎来到 My Example Site!</h1>' | sudo tee /var/www/my-example-site.com/html/index.html

3. 创建 Nginx 配置文件

/etc/nginx/conf.d/ 目录下为网站创建一个新的配置文件。文件名最好以 .conf 结尾,例如 my-example-site.com.conf

sudo vi /etc/nginx/conf.d/my-example-site.com.conf

4. 编辑配置文件

在打开的编辑器中,粘贴以下内容。这是一个基本的服务器块(server block)配置:

server {
    listen       80;
    server_name  my-example-site.com www.my-example-site.com; # 网站域名

    location / {
        root   /var/www/my-example-site.com/html; # 网站文件根目录
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
  • listen 80;: 监听标准的 HTTP 端口。
  • server_name: 网站域名。可以列出多个,用空格隔开。
  • root: 指向在第一步中创建的网站文件根目录。
  • index: 定义默认的索引文件。

保存并关闭文件。

5. 测试 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

6. 重新加载 Nginx

如果测试成功,重新加载 Nginx 服务以使新配置生效:

sudo systemctl reload nginx

7. 调整 SELinux 安全上下文 (重要)

在 CentOS 7 上,默认启用的 SELinux 会阻止 Nginx 访问非标准目录(如 /var/www/)下的文件,这通常会导致 403 Forbidden 错误。在访问网站前,需要为网站目录设置正确的安全上下文。

  • 检查当前上下文
    运行以下命令查看目录的 SELinux 上下文:

    ls -dZ /var/www/my-example-site.com/html

    如果输出中包含 var_t(例如 unconfined_u:object_r:var_t:s0),则说明上下文不正确,需要修复。

  • 修复上下文
    使用 restorecon 命令来恢复正确的默认上下文 (httpd_sys_content_t):

    sudo restorecon -Rv /var/www/my-example-site.com

现在,新网站已经配置完成。如果将域名 my-example-site.com 解析到服务器 IP,通过浏览器访问该域名时,将看到 “欢迎来到 My Example Site!” 的页面。


常见问题:为什么通过 IP 访问会显示我的网站而不是 Nginx 欢迎页?

这是一个在配置多个虚拟主机时非常常见的问题。

问题现象:

当按照“场景二”配置了 my-example-site.com 之后,发现通过服务器 IP 地址访问时,显示的不再是 Nginx 的默认欢迎页面,而是 my-example-site.com 的网站内容。

原因解析:默认服务器 (Default Server)

当 Nginx 收到一个无法匹配任何 server_name 的请求时(例如,通过 IP 地址直接访问),它会把这个请求交给该端口的默认服务器处理。

Nginx 判断默认服务器的规则如下:

  1. 显式指定:在 listen 指令后明确添加 default_server 参数的 server 块会成为默认服务器。例如:listen 80 default_server;
  2. 隐式规则:如果没有任何 server 块显式指定 default_server,那么 Nginx 会将配置文件中第一个被加载的监听该端口的 server 块作为默认服务器。

在上述场景中,由于 /etc/nginx/conf.d/my-example-site.com.conf 被加载,并且它的 server 块成为了处理 80 端口的第一个 server 块,因此它被隐式地当成了默认服务器。

解决方案:明确指定默认服务器

为了让 /etc/nginx/nginx.conf 中的 server 块(即显示 Nginx 欢迎页的那个)始终作为处理 IP 访问和未匹配域名的默认服务器,需要修改主配置文件,明确地告诉 Nginx 它的“默认”身份。

  1. 编辑主配置文件
    打开 /etc/nginx/nginx.conf 文件。

  2. 修改 listen 指令
    找到默认的 server 块,将其中的 listen 指令修改为如下内容,在后面加上 default_server 标志:

    # /etc/nginx/nginx.conf
    
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;
    
        # ... 其他配置 ...
    }
  3. 测试并重载 Nginx
    保存文件后,执行以下命令来检查配置并使其生效:

    sudo nginx -t
    sudo systemctl reload nginx

完成修改后,Nginx 的行为就会和预期一致:

  • 访问 http://my-example-site.com → 由 my-example-site.com.conf 处理。
  • 访问 http://<服务器IP地址> → 由 /etc/nginx/nginx.conf 中指定的默认服务器处理,显示 Nginx 欢迎页面。