如何在 Ubuntu 上为 Web 应用程序设置 Nginx 反向代理

作为一个拥有超过 10 年 Linux 系统工作经验的人,我可以说设置反向代理nginx是处理 Web 应用程序流量的最常见、最有效的方法之一。

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

在本指南中,我将引导您完成配置步骤nginx作为反向代理乌班图24.04以及在 Nginx 后面托管简单 Web 应用程序的示例。

先决条件

在我们开始之前,请确保您具备以下条件:

  • 乌班图24.04服务器启动并运行(您可以使用 VPS 或物理服务器)。
  • 用于执行系统管理任务的 root 或 sudo 权限。
  • 在后端服务器上运行的示例 Web 应用程序(我们将使用基本的Node.js此示例的应用程序)。
  • 基本的和网络概念。

步骤1:在Ubuntu 24.04上安装Nginx

首先,我们需要安装nginx使用以下命令从默认 Ubuntu 存储库获取 Web 服务器。

sudo apt update
sudo apt install nginx

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

sudo systemctl status nginx

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

sudo systemctl start nginx

确保 Nginx 在启动时自动启动:

sudo systemctl enable nginx

如果你有一个在您的服务器上,确保HTTP协议(港口80) 允许通行。

sudo ufw allow 'Nginx Full'
sudo ufw enable

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

首先,安装Node.jsnpm在您的服务器上:

sudo apt install nodejs npm

现在,让我们创建一个简单的Node.js网络应用程序:

sudo mkdir /var/www/myapp
cd /var/www/myapp

初始化Node.js应用程序:

sudo npm init -y

安装表达,一个简单的网络框架Node.js:

sudo npm install express

创建一个app.js文件内的/var/www/myapp目录包含以下内容:

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 https://localhost:${port}`);
});

开始你的Node.js应用。

sudo node app.js

您的后端 Web 应用程序现在正在运行https://localhost:3000您可以通过在浏览器中导航到以下地址来验证这一点,您应该看到“您好,这是一个后端应用程序!“ 信息。

https://your-server-ip:3000
测试后端应用程序

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

现在,我们来配置一下nginx将外界的请求转发给Node.js后端在端口上运行3000

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

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

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

server {
    listen 80;
    server_name your_domain_or_ip; location / { proxy_pass https://localhost:3000; # Forward requests to your backend server 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 -t
sudo systemctl restart nginx

现在,打开浏览器并导航到服务器的公共 IP 地址或域(例如,https://your-server-ip或者https://your_domain)。

您应该看到消息“您好,这是一个后端应用程序!“,这意味着 Nginx 已成功将请求转发到您的后端Node.js应用。

验证反向代理设置

为了安全连接,您可以配置SSL协议让我们加密

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain_or_ip
结论

在本指南中,我们配置了nginx作为反向代理将 HTTP 请求转发到后端Node.jsWeb 应用程序运行于localhost:3000在一个乌班图24.04服务器。

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