
作为一名有超过10年经验的Linux专家,我可以说,使用Nginx设置反向代理是处理Web应用流量最常见且高效的方法之一。
反向代理充当中介服务器,将客户端请求转发到适当的后端服务器,是负载均衡、安全性和性能的关键工具。
在本指南中,我将带你一步一步地配置Nginx作为反向代理,并展示如何在Nginx后面托管一个简单的Web应用。
在开始之前,请确保你具备以下条件:
已运行的Ubuntu 24.04服务器(可以是VPS或物理服务器)。
拥有root或sudo权限以执行系统管理任务。
一个运行在后端服务器上的示例Web应用(本例使用基本的Node.js应用)。
基本的Linux命令和网络概念知识。
步骤1:在Ubuntu 24.04上安装Nginx
首先,我们需要通过以下命令从Ubuntu的默认仓库安装Nginx Web服务器:
sudo apt update
sudo 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/myapp
cd /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 -t
然后重启Nginx:
sudo systemctl restart nginx
现在,在浏览器中访问服务器的公共IP地址或域名(例如,http://your-server-ip或http://your_domain)。
你应该会看到“Hello, this is a backend app!”的信息,表示Nginx已经成功将请求转发到后端的Node.js应用。
配置SSL(可选)
为了确保连接安全,可以使用Let’s Encrypt配置SSL:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain_or_ip
在本文中,我们将Nginx配置为反向代理,将HTTP请求转发到在localhost:3000上运行的后端Node.js Web应用。
通过遵循这些步骤,你已经了解了Nginx反向代理的基本概念,并学会了如何将一个简单的Web应用托管在Nginx后面。通过这个配置,你可以轻松扩展到更复杂的应用,并根据需要扩展你的基础设施。











