从零开始学Nginx:保姆级安装与使用教程 – wiki词典

从零开始学Nginx:保姆级安装与使用教程

Nginx (发音为 “engine-x”) 是一款免费、开源、高性能的HTTP服务器和反向代理,也是一个IMAP/POP3/SMTP代理服务器。Nginx以其高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。

本教程将从零开始,一步步带你安装和使用Nginx,让你轻松入门。

1. Nginx能做什么?

在开始安装之前,我们先简单了解一下Nginx的几个核心功能:

  • Web服务器:最基本的功能,可以直接向用户的浏览器提供静态内容(如HTML、CSS、图片文件)。
  • 反向代理:这是Nginx最常用的功能之一。它作为中间人,将客户端的请求转发到后端的应用服务器(如Tomcat, Node.js, Python应用),然后将后端服务器的响应返回给客户端。这样做可以隐藏后端服务器的真实IP,提高安全性。
  • 负载均衡:当你的网站访问量巨大时,一台服务器可能无法承受。Nginx可以将大量的请求分发到多台后端服务器上,从而保证服务的高可用和高性能。
  • HTTP缓存:Nginx可以缓存一部分请求内容,当再次收到相同请求时,可以直接返回缓存内容,而无需再次请求后端服务器,极大地加快了响应速度并降低了后端服务器的压力。
  • 动静分离:将动态请求(需要程序处理的请求)和静态请求(直接返回文件的请求)分开处理。Nginx处理静态资源非常高效,可以大大减轻后端应用服务器的负担。

2. 在Ubuntu/Debian上安装Nginx

本教程以Ubuntu系统为例,因为它是最常见的服务器操作系统之一。

第一步:更新软件包列表

在安装新软件之前,最好先更新一下系统的软件包列表。

bash
sudo apt update

第二步:安装Nginx

使用apt包管理器可以直接安装Nginx。

bash
sudo apt install nginx

第三步:配置防火墙

如果你的服务器开启了UFW防火墙,需要允许HTTP和HTTPS流量。

  1. 查看可用的应用配置:
    bash
    sudo ufw app list

    你会看到类似Nginx Full, Nginx HTTP, Nginx HTTPS的选项。

  2. 我们选择Nginx Full,它允许HTTP和HTTPS的流量(分别对应80和443端口)。
    bash
    sudo ufw allow 'Nginx Full'

  3. 检查防火墙状态,确保规则已生效。
    bash
    sudo ufw status

第四步:验证Nginx是否运行成功

安装完成后,Nginx服务会自动启动。你可以通过以下命令检查其状态:

bash
systemctl status nginx

如果看到 Active: active (running) 的字样,说明Nginx已经成功运行。

你也可以直接在浏览器中输入你服务器的IP地址。如果一切正常,你会看到Nginx的默认欢迎页面。

3. Nginx常用命令

管理Nginx服务,你需要掌握以下几个基本命令:

  • 启动Nginx
    bash
    sudo systemctl start nginx

  • 停止Nginx
    bash
    sudo systemctl stop nginx

  • 重启Nginx
    bash
    sudo systemctl restart nginx

  • 重新加载配置 (平滑重启,推荐)
    当你修改了Nginx的配置文件后,使用此命令可以让Nginx加载新配置而无需中断当前的服务。
    bash
    sudo systemctl reload nginx

  • 检查配置文件语法
    在每次修改配置文件后,执行reloadrestart之前,都应该先检查一下配置文件是否有语法错误。这是一个非常好的习惯。
    bash
    sudo nginx -t

    如果配置正确,你会看到 syntax is oktest is successful 的提示。

4. 配置文件结构与实战

Nginx的所有功能都是通过配置文件来控制的。

  • 主配置文件:/etc/nginx/nginx.conf
  • 虚拟主机配置目录:/etc/nginx/sites-available/
  • 启用的虚拟主机目录:/etc/nginx/sites-enabled/

通常我们不会去修改主配置文件 nginx.conf。最佳实践是:为每个网站(或服务)在 sites-available 目录下创建一个独立的配置文件,然后通过创建一个符号链接(soft link)到 sites-enabled 目录来启用它。

实战一:部署一个简单的静态网站

让我们来部署一个简单的个人主页。

  1. 创建网站文件目录
    我们为网站创建一个新目录。
    bash
    sudo mkdir -p /var/www/my-website

  2. 创建一个简单的HTML页面
    bash
    sudo nano /var/www/my-website/index.html

    在打开的编辑器中粘贴以下内容:
    html
    <!DOCTYPE html>
    <html>
    <head>
    <title>欢迎来到我的网站</title>
    <style>
    body { font-family: sans-serif; text-align: center; padding-top: 50px; }
    </style>
    </head>
    <body>
    <h1>你好,世界!我的Nginx网站</h1>
    <p>这个页面由Nginx提供服务。</p>
    </body>
    </html>

    保存并关闭文件 (在 nano 中是 Ctrl+X, Y, Enter)。

  3. 创建Nginx配置文件
    sites-available 目录为新网站创建一个配置文件。
    bash
    sudo nano /etc/nginx/sites-available/my-website

    粘贴以下配置内容:
    “`nginx
    server {
    listen 80;
    listen [::]:80;

    server_name your_domain_or_ip; # 将这里替换成你的域名或IP地址
    
    root /var/www/my-website;
    index index.html;
    
    location / {
        try_files $uri $uri/ =404;
    }
    

    }
    ``
    **配置解释**:
    *
    listen 80: 监听80端口(HTTP请求)。
    *
    server_name: 你的域名或服务器IP。
    *
    root: 网站文件的根目录。
    *
    index: 默认索引文件。
    *
    location /: 定义如何处理进来的请求。try_files` 表示会依次尝试查找请求的文件、目录,如果都找不到则返回404错误。

  4. 启用该网站
    通过创建符号链接来启用这个配置。
    bash
    sudo ln -s /etc/nginx/sites-available/my-website /etc/nginx/sites-enabled/

    为了避免冲突,可以删除默认的配置链接:
    bash
    sudo rm /etc/nginx/sites-enabled/default

  5. 测试并重启Nginx
    bash
    sudo nginx -t # 检查语法
    sudo systemctl reload nginx # 重新加载配置

现在,再次访问你的服务器IP地址,你就应该能看到你刚刚创建的 “你好,世界!” 页面了。

实战二:设置反向代理

假设你有一个在 http://localhost:8080 运行的Java、Node.js或其他应用,你希望通过Nginx从80端口访问它。

  1. 修改配置文件
    编辑刚才的网站配置文件:
    bash
    sudo nano /etc/nginx/sites-available/my-website

    将内容修改为:
    “`nginx
    server {
    listen 80;
    listen [::]:80;

    server_name your_domain_or_ip; # 替换成你的域名或IP地址
    
    location / {
        proxy_pass http://localhost:8080;
        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;
    }
    

    }
    ``
    **配置解释**:
    *
    location /: 匹配所有进来的请求。
    *
    proxy_pass http://localhost:8080;: 这是核心!它告诉Nginx将所有匹配的请求都转发到http://localhost:8080
    *
    proxy_set_header …`: 这些头部信息是为了将真实的客户端信息(如IP、Host等)传递给后端应用,这在很多应用中都非常重要。

  2. 测试并重启Nginx
    bash
    sudo nginx -t
    sudo systemctl reload nginx

现在,当你访问你的域名或IP时,Nginx会将请求无缝地转发到你内部的8080端口的应用上。用户完全感知不到这个过程,实现了反向代理。

总结

恭喜你!通过这篇教程,你已经掌握了Nginx的安装、基本管理以及两个最核心的应用场景:静态网站部署反向代理。Nginx的功能远不止于此,负载均衡、HTTPS配置、缓存优化等都是其强大的功能。

希望这篇保姆级的教程能为你打开Nginx世界的大门。继续探索,你会发现它是一个运维和开发人员的瑞士军刀。

滚动至顶部