作为一名拥有 10 多年 Linux 系统使用经验的技术人员,我可以说,使用 Nginx 设置反向代理是处理 Web 应用流量最常用且最高效的方式之一。

反向代理充当中间服务器,将客户端请求转发到相应的后端服务器,它是实现负载均衡、提升安全性和性能的重要工具。

在本指南中,我将逐步介绍如何在 Ubuntu 24.04 上将 Nginx 配置为反向代理,并演示如何在 Nginx 后面托管一个简单的 Web 应用。

前提条件

在开始之前,请确保满足以下条件:

  • 已启动并运行的 Ubuntu 24.04 服务器(可以使用 VPS 或物理服务器)。
  • 具有 root 或 sudo 权限以执行系统管理任务。
  • 在后端服务器上运行的示例 Web 应用(本例中我们将使用一个基础的 Node.js 应用)。
  • 具备基本的 Linux 命令和网络概念知识。

第 1 步:在 Ubuntu 24.04 上安装 Nginx

首先,我们需要使用以下命令从默认的 Ubuntu 软件源安装 Nginx Web 服务器。

sudo apt updatesudo apt install nginx

安装完成后,您可以检查 Nginx 的状态以确保其正在运行:

sudo systemctl status nginx

如果 Nginx 未运行,请使用以下命令启动它:

sudo systemctl start nginx

要确保 Nginx 在开机时自动启动:

sudo systemctl enable nginx

如果您的服务器上启用了 UFW 防火墙,请确保允许 HTTP(端口 80)流量通过。

sudo ufw allow 'Nginx Full'sudo ufw enable

第 2 步:设置后端 Web 应用

在本例中,我们将使用一个简单的 Node.js 应用作为后端服务器,它将监听端口 3000。

首先,在服务器上安装 Node.js 和 npm:

sudo apt install nodejs npm

现在,让我们创建一个简单的 Node.js Web 应用:

sudo mkdir /var/www/myappcd /var/www/myapp

初始化 Node.js 应用:

sudo npm init -y

安装 Express,这是一个用于 Node.js 的简单 Web 框架:

sudo npm install express

在 /var/www/myapp 目录中创建 app.js 文件,内容如下:

const express = require('express');const app = express();const port = 3000;app.get('/', (req, res) => { res.send('Hello, this is a backend app!');});app.listen(port, () => { console.log(`App running on http://localhost:${port}`);});

启动您的 Node.js 应用。

sudo node app.js

您的后端 Web 应用现在已在 http://localhost:3000 上运行。您可以在浏览器中访问以下地址进行验证,应该会看到“Hello, this is a backend app!”消息。

http://your-server-ip:3000
测试后端应用
测试后端应用

第 3 步:将 Nginx 配置为反向代理

现在,让我们配置 Nginx,将来自外部世界的请求转发到运行在端口 3000 上的 Node.js 后端。

首先,在 sites-available 目录中创建一个新的配置文件:

sudo nano /etc/nginx/sites-available/myapp

在新文件中添加以下配置,告知 Nginx 将传入的 HTTP 请求转发到运行在端口 3000 上的后端服务器:

server {
    listen 80;
    server_name your_domain_or_ip;

    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_cache_bypass $http_upgrade;
    }
}

保存配置后,创建一个指向 sites-enabled 目录的符号链接以启用此配置:

sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/

在重启 Nginx 之前,务必确保没有语法错误:

sudo nginx -tsudo systemctl restart nginx

现在,打开浏览器并访问服务器的公网 IP 地址或域名(例如 http://your-server-ip 或 http://your_domain)。

您应该会看到“Hello, this is a backend app!”消息,这意味着 Nginx 已成功将请求转发到您的后端 Node.js 应用。

验证反向代理设置
验证反向代理设置

为了实现安全连接,您可以使用 Let’s Encrypt 配置 SSL。

sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d your_domain_or_ip
总结

在本指南中,我们在 Ubuntu 24.04 服务器上将 Nginx 配置为反向代理,用于将 HTTP 请求转发到运行在 localhost:3000 上的后端 Node.js Web 应用。

通过遵循这些步骤,您已经了解了使用 Nginx 进行反向代理的基本概念,以及如何在 Nginx 后面托管一个简单的 Web 应用。借助此设置,您可以轻松将其扩展到更复杂的应用,并根据需要扩展基础设施。