Nginx 安装与配置教程 – wiki词典

Nginx 安装与配置教程

Nginx (发音为 “engine-x”) 是一个高性能的 HTTP 和反向代理服务器,同时也是一个邮件代理服务器和通用的 TCP/UDP 代理服务器。它以其卓越的性能、稳定性、丰富的功能集、简单的配置以及低资源消耗而闻名。本文将详细指导您如何在不同的 Linux 系统上安装 Nginx,并进行基础配置,涵盖虚拟主机、反向代理和 SSL/TLS 加密等常见使用场景。


引言

在现代网络架构中,Web 服务器扮演着至关重要的角色。无论是静态网站托管、动态应用服务,还是作为后端服务的入口,一个高效可靠的 Web 服务器都是不可或缺的。Nginx 正是这样一款能够满足这些需求的强大工具,尤其擅长处理高并发连接,使其成为许多大型网站和应用的首选。


第一部分:Nginx 安装

Nginx 的安装过程因操作系统的不同而略有差异。我们将介绍在主流的 Ubuntu/Debian 和 CentOS/RHEL 系统上的安装方法。

在 Ubuntu/Debian 系统上安装 Nginx

Ubuntu 和 Debian 用户可以通过其官方包管理器 apt 轻松安装 Nginx。

  1. 更新包索引
    在安装任何新软件包之前,始终建议更新您的本地包索引,以确保获取最新版本的软件。

    bash
    sudo apt update

  2. 安装 Nginx
    执行以下命令安装 Nginx。安装完成后,Nginx 服务通常会自动启动。

    bash
    sudo apt install nginx

  3. 配置防火墙 (UFW)
    如果您在系统上启用了 UFW (Uncomplicated Firewall),需要允许 Nginx 的流量通过。

    • 允许 HTTP (端口 80) 流量:
      bash
      sudo ufw allow 'Nginx HTTP'
    • 允许 HTTPS (端口 443) 流量:
      bash
      sudo ufw allow 'Nginx HTTPS'
    • 允许 HTTP 和 HTTPS 两种流量:
      bash
      sudo ufw allow 'Nginx Full'
    • 如果 UFW 尚未启用,请启用它:
      bash
      sudo ufw enable
    • 验证防火墙状态:
      bash
      sudo ufw status
  4. 检查 Nginx 状态
    使用 systemctl 命令检查 Nginx 服务是否正在运行。

    bash
    sudo systemctl status nginx

    您应该会看到 active (running) 的输出。

在 CentOS/RHEL 系统上安装 Nginx

对于 CentOS 和 RHEL 用户,Nginx 通常不在默认的软件仓库中,因此需要先添加 EPEL (Extra Packages for Enterprise Linux) 仓库。

  1. 安装 EPEL 仓库
    bash
    sudo yum install epel-release -y

  2. 安装 Nginx
    添加 EPEL 仓库后,即可使用 yum 安装 Nginx。

    bash
    sudo yum install nginx -y

  3. 启动并启用 Nginx
    在 CentOS/RHEL 上,Nginx 安装后不会自动启动。您需要手动启动并设置其在系统启动时自动运行。

    bash
    sudo systemctl start nginx
    sudo systemctl enable nginx # 设置 Nginx 开机自启动

  4. 配置防火墙 (firewalld)
    如果您的系统使用 firewalld,需要开放 HTTP 和 HTTPS 端口。

    bash
    sudo firewall-cmd --permanent --zone=public --add-service=http
    sudo firewall-cmd --permanent --zone=public --add-service=https
    sudo firewall-cmd --reload # 重新加载防火墙规则

  5. 检查 Nginx 状态
    同样,使用 systemctl 检查 Nginx 服务状态。

    bash
    sudo systemctl status nginx

    您应该会看到 active (running) 的输出。


第二部分:Nginx 基础配置

Nginx 的核心配置文件位于 /etc/nginx/nginx.conf。为了更好地组织配置,Nginx 通常会使用 sites-availablesites-enabled 目录来管理各个站点的配置。

  • /etc/nginx/nginx.conf: Nginx 的主配置文件。
  • /etc/nginx/sites-available/: 存放所有可用的站点配置文件。
  • /etc/nginx/sites-enabled/: 存放实际启用站点的配置文件,通常是通过软链接指向 sites-available 中的文件。

验证安装

安装成功后,您可以通过在 Web 浏览器中输入服务器的 IP 地址或域名来验证 Nginx 是否正常工作。您应该会看到 Nginx 的默认欢迎页面。


第三部分:常见配置案例

Nginx 的强大之处在于其灵活的配置能力。以下是一些常见的配置案例。

配置虚拟主机 (Server Blocks)

虚拟主机 (Nginx 中称为 “server block”) 允许您在同一个服务器上托管多个网站。

  1. 创建站点目录和 index.html
    为您的新网站创建一个根目录,并在其中放置一个 index.html 文件。将 your_domain 替换为您的实际域名。

    bash
    sudo mkdir -p /var/www/your_domain/html
    sudo nano /var/www/your_domain/html/index.html

    index.html 中添加以下内容:
    html
    <!DOCTYPE html>
    <html>
    <head>
    <title>欢迎来到您的域名!</title>
    </head>
    <body>
    <h1>成功! 您的 Nginx 虚拟主机为 your_domain 正常工作。</h1>
    </body>
    </html>

  2. 设置文件权限
    确保 Nginx 进程有权读取您的网站文件。

    • 对于 Ubuntu/Debian:
      bash
      sudo chown -R www-data:www-data /var/www/your_domain/html
    • 对于 CentOS/RHEL:
      bash
      sudo chown -R nginx:nginx /var/www/your_domain/html
    • 设置目录和文件的权限:
      bash
      sudo chmod -R 755 /var/www/your_domain
  3. 创建服务器块配置文件
    /etc/nginx/sites-available/ 目录中为您的域名创建一个新的配置文件。

    bash
    sudo nano /etc/nginx/sites-available/your_domain

    添加以下配置(将 your_domain 替换为您的实际域名):
    “`nginx
    server {
    listen 80;
    listen [::]:80;

    root /var/www/your_domain/html;
    index index.html index.htm;
    
    server_name your_domain www.your_domain;
    
    location / {
        try_files $uri $uri/ =404;
    }
    
    error_log /var/log/nginx/your_domain_error.log;
    access_log /var/log/nginx/your_domain_access.log;
    

    }
    “`

  4. 启用服务器块
    通过创建一个软链接,将 sites-available 中的配置文件链接到 sites-enabled 目录。

    bash
    sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

  5. 测试配置
    在应用配置之前,务必测试 Nginx 配置文件的语法是否正确。

    bash
    sudo nginx -t

    如果一切正常,您将看到 syntax is oktest is successful

  6. 重启 Nginx
    应用新的配置需要重启 Nginx 服务。

    bash
    sudo systemctl restart nginx

    现在,当您访问 http://your_domain 时,Nginx 将会提供 /var/www/your_domain/html 目录下的内容。

Nginx 作为反向代理

Nginx 可以作为反向代理,将客户端请求转发到后端应用程序服务器(例如 Node.js、Python 应用等),从而提高性能、安全性和负载均衡能力。

以下是将所有请求代理到运行在 localhost:3000 上的后端应用的配置示例:

“`nginx
server {
listen 80;
server_name your_domain www.your_domain;

location / {
    proxy_pass http://localhost:3000; # 将请求转发到后端应用
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    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;
}

}
“`
测试与重启

修改配置后,同样需要测试配置并重启 Nginx:

bash
sudo nginx -t
sudo systemctl restart nginx

SSL/TLS 配置 (HTTPS)

为您的网站启用 HTTPS 是保护用户数据和提高网站信任度的关键。这通常涉及获取 SSL 证书并配置 Nginx 使用它。

使用自签名证书 (仅用于测试)

在生产环境中,您应该使用来自受信任证书颁发机构 (CA) 的证书,例如 Let’s Encrypt。为了演示目的,我们可以生成一个自签名证书。

  1. 创建 SSL 证书目录
    bash
    sudo mkdir -p /etc/nginx/ssl

  2. 生成自签名 SSL 证书和密钥
    bash
    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx-selfsigned.key -out /etc/nginx/ssl/nginx-selfsigned.crt

    在生成过程中,您会被要求输入一些信息;Common Name 通常应填写您的域名。

  3. 修改服务器块配置以启用 HTTPS
    我们将配置两个 server 块:一个用于处理 HTTP 请求并将其重定向到 HTTPS,另一个用于处理 HTTPS 请求。

    “`nginx

    HTTP 到 HTTPS 的重定向

    server {
    listen 80;
    listen [::]:80;
    server_name your_domain www.your_domain;
    return 301 https://$server_name$request_uri; # 重定向所有 HTTP 到 HTTPS
    }

    HTTPS 配置

    server {
    listen 443 ssl http2; # 监听 443 端口,启用 SSL 和 HTTP/2
    listen [::]:443 ssl http2;
    server_name your_domain www.your_domain;

    ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt; # 证书路径
    ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key; # 私钥路径
    
    ssl_protocols TLSv1.2 TLSv1.3; # 推荐的 TLS 协议版本
    ssl_ciphers HIGH:!aNULL:!MD5; # 推荐的加密套件
    
    root /var/www/your_domain/html;
    index index.html index.htm;
    
    location / {
        try_files $uri $uri/ =404;
    }
    
    error_log /var/log/nginx/your_domain_error.log;
    access_log /var/log/nginx/your_domain_access.log;
    

    }
    “`

  4. 测试与重启
    bash
    sudo nginx -t
    sudo systemctl restart nginx

    现在,当您访问 https://your_domain 时,您的浏览器可能会因为自签名证书而发出警告,但连接将是加密的。如果通过 HTTP 访问,则会自动重定向到 HTTPS。


第四部分:Nginx 常用管理命令

了解如何管理 Nginx 服务对于日常维护至关重要。

  • 启动 Nginx:
    bash
    sudo systemctl start nginx
  • 停止 Nginx:
    bash
    sudo systemctl stop nginx
  • 重启 Nginx: (先停止再启动,会短暂中断服务)
    bash
    sudo systemctl restart nginx
  • 重新加载 Nginx 配置: (不中断服务,平滑应用配置更改)
    bash
    sudo systemctl reload nginx
  • 检查 Nginx 状态:
    bash
    sudo systemctl status nginx
  • 测试 Nginx 配置语法:
    bash
    sudo nginx -t
  • 设置 Nginx 开机自启动:
    bash
    sudo systemctl enable nginx
  • 禁用 Nginx 开机自启动:
    bash
    sudo systemctl disable nginx

总结

Nginx 是一个功能强大且灵活的 Web 服务器,通过本文的详细教程,您应该已经掌握了在 Ubuntu/Debian 和 CentOS/RHEL 系统上安装 Nginx 的方法,并学会了如何配置虚拟主机、反向代理以及启用 SSL/TLS 加密。随着您对 Nginx 的使用深入,您会发现它能胜任更多复杂的任务,为您的 Web 服务提供坚实的基础。

滚动至顶部