手把手教你在CentOS安装Nginx Web服务器

手把手教你在 CentOS 上安装 Nginx Web 服务器(超详细版)

Nginx (发音为 "engine-x") 是一款高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3 代理服务。以其稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。本文将详细指导您如何在 CentOS 系统上安装和配置 Nginx,从基础安装到高级配置,力求全面且易于理解。

适用范围: 本教程适用于 CentOS 7、CentOS 8 以及较新的衍生版本(如 AlmaLinux, Rocky Linux)。虽然不同版本间可能存在细微差异,但总体步骤是相同的。

先决条件:

  • 一台运行 CentOS 的服务器(可以是虚拟机或物理机)。
  • 具有 sudo 权限的用户帐户。
  • 服务器已连接到互联网。
  • (可选)已配置好域名解析,将域名指向服务器 IP 地址。

第一部分:基础安装与配置

步骤 1:更新系统软件包

在安装任何新软件之前,最佳实践是确保您的系统软件包是最新的。打开终端并运行以下命令:

bash
sudo yum update -y

这条命令会更新所有已安装的软件包到最新版本。-y 标志会自动确认所有提示,无需手动干预。

步骤 2:安装 Nginx

CentOS 的默认软件仓库中通常包含 Nginx,但可能不是最新版本。为了安装最新稳定版的 Nginx,我们将使用官方的 Nginx 仓库。

  1. 安装 EPEL 仓库 (如果尚未安装): EPEL (Extra Packages for Enterprise Linux) 仓库提供了许多额外的软件包,包括一些 Nginx 的依赖。

    bash
    sudo yum install epel-release -y

  2. 添加 Nginx 官方仓库:

    创建一个 Nginx 仓库配置文件:

    bash
    sudo nano /etc/yum.repos.d/nginx.repo

    将以下内容复制并粘贴到文件中(根据您的 CentOS 版本选择):

    对于 CentOS 7:

    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=0
    enabled=1

    对于 CentOS 8/9 (以及 AlmaLinux, Rocky Linux):

    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=0
    enabled=1

    * $releasever 会自动替换为您的 CentOS 主版本号(例如 8 或 9)。
    * gpgcheck=0 禁用了 GPG 签名检查。虽然通常建议启用 GPG 检查以确保软件包的完整性,但在某些情况下(例如测试环境),可以暂时禁用。如果您想启用 GPG 检查,可以将 gpgcheck=0 改为 gpgcheck=1,并导入 Nginx GPG 密钥:sudo rpm --import https://nginx.org/keys/nginx_signing.key

    保存并关闭文件 (Ctrl+O, Enter, Ctrl+X)。

  3. 安装 Nginx:

    bash
    sudo yum install nginx -y

步骤 3:启动并启用 Nginx

  1. 启动 Nginx 服务:

    bash
    sudo systemctl start nginx

  2. 设置 Nginx 开机自启:

    bash
    sudo systemctl enable nginx

  3. 检查 Nginx 服务状态:

    bash
    sudo systemctl status nginx

    如果 Nginx 正常运行,您应该看到类似以下的输出:

    ● nginx.service - The nginx HTTP and reverse proxy server
    Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
    Active: active (running) since ...
    ...

    Active: active (running) 表示 Nginx 正在运行。

步骤 4:配置防火墙 (如果已启用)

如果您的 CentOS 服务器启用了防火墙 (firewalld),您需要允许 HTTP (端口 80) 和 HTTPS (端口 443) 流量通过。

  1. 允许 HTTP 和 HTTPS 流量:

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

  2. 重新加载防火墙配置:

    bash
    sudo firewall-cmd --reload

步骤 5:测试 Nginx

现在,在您的 Web 浏览器中输入服务器的 IP 地址或域名。如果一切顺利,您应该看到 Nginx 的默认欢迎页面。这表明 Nginx 已成功安装并正在运行。

第二部分:配置 Nginx 虚拟主机(多站点)

如果您计划在同一台服务器上托管多个网站,您需要配置 Nginx 虚拟主机(也称为服务器块)。每个虚拟主机定义了一个独立的网站配置。

步骤 1:创建网站目录

为您的每个网站创建一个目录来存储网站文件。例如,如果您要托管两个网站 example.comtest.com

bash
sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/test.com/html

-p 选项会创建所有必要的父目录(如果它们不存在)。

步骤 2:创建示例 HTML 文件

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

bash
sudo nano /var/www/example.com/html/index.html

添加以下内容 (您可以根据需要修改):

```html




Welcome to example.com

This is example.com


```

test.com 也执行相同的操作:

bash
sudo nano /var/www/test.com/html/index.html

```html




Welcome to test.com

This is test.com


```

步骤 3:创建虚拟主机配置文件

Nginx 的虚拟主机配置文件通常位于 /etc/nginx/conf.d/ 目录中。为每个网站创建一个单独的配置文件。

  1. 创建 example.com.conf:

    bash
    sudo nano /etc/nginx/conf.d/example.com.conf

    添加以下配置:

    ```nginx
    server {
    listen 80;
    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;
    }
    

    }
    ```

    • listen 80;listen [::]:80;: 指定监听的端口。80 是 HTTP 的标准端口。
    • server_name: 指定与此虚拟主机匹配的域名。
    • root: 指定网站文件的根目录。
    • index: 指定默认索引文件的名称。
    • location /: 定义对根 URL (/) 的请求的处理方式。try_files 指令会依次尝试查找请求的文件,如果找不到,则返回 404 错误。
  2. 创建 test.com.conf:

    bash
    sudo nano /etc/nginx/conf.d/test.com.conf

    添加以下配置(类似于 example.com.conf,但更改域名和根目录):

    ```nginx
    server {
    listen 80;
    listen [::]:80;

    server_name test.com www.test.com;
    
    root /var/www/test.com/html;
    index index.html index.htm;
    
    location / {
        try_files $uri $uri/ =404;
    }
    

    }
    ```

步骤 4:禁用默认虚拟主机 (可选)

Nginx 默认包含一个虚拟主机配置文件 (/etc/nginx/conf.d/default.conf/etc/nginx/nginx.conf 中的 server 块)。如果您不需要它,可以将其删除或重命名以禁用它:

```bash
sudo rm /etc/nginx/conf.d/default.conf

或者

sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
``
或者,您也可以直接注释掉
/etc/nginx/nginx.conf中的默认server`块。

步骤 5:检查 Nginx 配置并重新加载

  1. 检查配置语法:

    bash
    sudo nginx -t

    如果配置正确,您应该看到类似以下的输出:

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful

    如果有错误,请仔细检查配置文件,确保没有拼写错误或语法问题。

  2. 重新加载 Nginx:

    bash
    sudo systemctl reload nginx

    重新加载会应用新的配置,而无需中断现有的连接。

步骤 6: 设置文件权限

确保 Nginx 用户 (通常是 nginxwww-data) 对网站目录具有读取权限。

bash
sudo chown -R nginx:nginx /var/www/example.com
sudo chown -R nginx:nginx /var/www/test.com
sudo chmod -R 755 /var/www/

这些命令设置了目录和文件的所有者和权限。

步骤 7:测试虚拟主机

现在,在您的 Web 浏览器中输入每个网站的域名 (例如 example.comtest.com)。如果一切配置正确,您应该看到您在每个网站的 index.html 文件中定义的相应内容。

第三部分:高级配置与优化

1. 启用 HTTPS (SSL/TLS)

为了保护您的网站和用户数据,强烈建议启用 HTTPS。您可以使用 Let's Encrypt 免费获取 SSL 证书。

  1. 安装 Certbot: Certbot 是一个用于自动获取和安装 Let's Encrypt 证书的工具。

    bash
    sudo yum install certbot python3-certbot-nginx -y

  2. 获取并安装证书:

    bash
    sudo certbot --nginx -d example.com -d www.example.com -d test.com -d www.test.com

    这条命令会为 example.comwww.example.comtest.comwww.test.com 获取证书,并自动配置 Nginx。按照 Certbot 的提示进行操作。

    Certbot 会自动更新您的 Nginx 配置文件以使用 HTTPS,并设置证书自动续期。

2. 配置缓存

Nginx 可以缓存静态内容(如图像、CSS 和 JavaScript 文件),以减少服务器负载并提高网站速度。

在您的虚拟主机配置文件中 (例如 /etc/nginx/conf.d/example.com.conf),添加以下配置:

nginx
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d; # 缓存 30 天
add_header Cache-Control "public";
}

这将告诉浏览器缓存这些文件类型 30 天。您可以根据需要调整 expires 值。

3. 启用 Gzip 压缩

Gzip 压缩可以减小 HTML、CSS 和 JavaScript 文件的大小,从而加快页面加载速度。

在您的 nginx.conf 文件中 (通常是 /etc/nginx/nginx.conf),找到 http 块,并添加或修改以下配置:

```nginx
http {
...
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 6; #压缩等级,1-9,数字越大压缩率越高,也越耗费CPU
gzip_min_length 1000; #不压缩小于这个大小的文件

...

}
``
*
gzip on;启用 Gzip 压缩。
*
gzip_types指定要压缩的文件类型。
*
gzip_comp_level设置压缩级别。
*
gzip_min_length`设置最小文件大小,小于该大小的文件不会被压缩。

4. 配置反向代理

Nginx 经常被用作反向代理,将客户端请求转发到后端服务器(如 Node.js、Python 或 Java 应用程序)。

在您的虚拟主机配置文件中,使用 proxy_pass 指令将请求转发到后端服务器:

```nginx
server {
...

location / {
    proxy_pass http://localhost:3000; # 将请求转发到本地 3000 端口
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

}
```

  • proxy_pass: 指定后端服务器的地址和端口。
  • proxy_set_header: 设置 HTTP 请求头,以便后端服务器可以获取客户端的真实 IP 地址和其他信息。

5. 日志配置

Nginx 会记录访问日志和错误日志。默认情况下,这些日志位于 /var/log/nginx/ 目录中。

  • access.log: 记录每个客户端请求的详细信息。
  • error.log: 记录 Nginx 遇到的错误。

您可以在 nginx.conf 文件中或虚拟主机配置文件中自定义日志文件的位置和格式。 例如, 在http或者server块中:

access_log /var/log/nginx/access.log combined;
error_log /var/log/nginx/error.log warn;

  • combined是一种常用的日志格式。
  • warn设置error.log记录warning及以上级别的日志。

6. 限制连接数和请求速率

Nginx 提供了限制连接数和请求速率的功能,可以防止恶意攻击或过载。

  • 限制连接数:

    http 块中定义一个 limit_conn_zone

    nginx
    http {
    ...
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    ...
    }

    serverlocation 块中使用 limit_conn 指令:

    nginx
    server {
    ...
    location / {
    limit_conn addr 10; # 允许每个 IP 地址最多 10 个并发连接
    ...
    }
    }

  • 限制请求速率:

    http 块中定义一个 limit_req_zone

    nginx
    http {
    ...
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    ...
    }

    serverlocation 块中使用 limit_req 指令:

    nginx
    server {
    ...
    location / {
    limit_req zone=one burst=5 nodelay; # 允许每秒 1 个请求,突发 5 个请求
    ...
    }
    }

    rate=1r/s 表示每秒允许 1 个请求。burst=5 允许最多 5 个请求的突发,nodelay 表示立即处理突发请求。

第四部分:故障排除

如果在安装或配置 Nginx 过程中遇到问题,请参考以下常见问题和解决方法:

  1. Nginx 无法启动:

    • 检查错误日志 (/var/log/nginx/error.log),查看详细的错误信息。
    • 使用 sudo nginx -t 检查配置文件语法是否正确。
    • 确保没有其他程序占用了 Nginx 使用的端口 (80 或 443)。可以使用 sudo netstat -tulpn | grep :80sudo ss -tulpn | grep :80 查看端口占用情况。
  2. 无法访问网站:

    • 检查防火墙设置,确保允许 HTTP (80) 和 HTTPS (443) 流量通过。
    • 检查 DNS 解析是否正确,确保域名指向服务器的 IP 地址。
    • 检查 Nginx 虚拟主机配置,确保 server_name 指令与您的域名匹配,root 指令指向正确的网站目录。
    • 检查网站目录的文件权限,确保 Nginx 用户具有读取权限。
  3. 502 Bad Gateway 错误:

    • 这通常表示 Nginx 无法连接到后端服务器。
    • 检查后端服务器是否正在运行,并且监听正确的端口。
    • 检查 Nginx 虚拟主机配置文件中的 proxy_pass 指令是否正确配置。
  4. 403 Forbidden 错误:

    • 检查对应目录以及文件的权限,确保nginx的运行用户可以访问。
  5. 404 Not Found 错误:

    • 检查请求的url在root指定的目录中是否存在。
    • 检查是否配置了正确的index指令。

总结

本文详细介绍了在 CentOS 上安装、配置和优化 Nginx Web 服务器的各个方面。从基础安装到虚拟主机配置,再到 HTTPS、缓存、Gzip 压缩、反向代理和安全加固等高级主题,希望能够帮助您构建一个高性能、安全可靠的 Web 服务器。请记住,这只是 Nginx 众多功能的冰山一角,您可以根据自己的需求进一步探索和定制 Nginx。 建议您阅读 Nginx 官方文档 (https://nginx.org/en/docs/) 以获取更深入的了解。

THE END