VPS配置Nginx反向代理完整教程


Nginx是目前最流行的高性能Web服务器和反向代理服务器。在搬瓦工VPS上配置Nginx反向代理,可以将外部请求转发到后端应用服务(如Node.js、Python、Java等),同时提供负载均衡、缓存和SSL终端等功能。本文详细介绍反向代理的完整配置流程。

安装Nginx

在搬瓦工VPS上安装Nginx,根据系统版本选择对应命令:

Debian/Ubuntu 系统:

sudo apt update
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

CentOS/AlmaLinux 系统:

sudo yum install epel-release -y
sudo yum install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

安装完成后,访问VPS的IP地址,能看到Nginx默认欢迎页面即表示安装成功。

基本反向代理配置(proxy_pass)

反向代理的核心指令是 proxy_pass,它将匹配的请求转发到指定的后端服务地址。创建站点配置文件:

sudo nano /etc/nginx/conf.d/myapp.conf

写入以下内容:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        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;
    }
}

这段配置将所有发往 example.com 的请求代理到本地 3000 端口的后端应用。proxy_set_header 指令确保后端能获取到客户端的真实IP和协议信息。

# 检查配置语法
sudo nginx -t

# 重新加载配置
sudo nginx -s reload

请求头(Headers)详解

配置反向代理时,正确传递请求头非常重要。以下是常用的请求头设置:

location / {
    proxy_pass http://127.0.0.1:3000;

    # 传递原始Host头
    proxy_set_header Host $host;

    # 传递客户端真实IP
    proxy_set_header X-Real-IP $remote_addr;

    # 传递代理链路中的所有IP
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # 传递原始请求协议(http或https)
    proxy_set_header X-Forwarded-Proto $scheme;

    # 连接超时设置
    proxy_connect_timeout 60s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;

    # 缓冲区设置
    proxy_buffering on;
    proxy_buffer_size 4k;
    proxy_buffers 8 4k;
}

如果后端应用需要获取客户端真实IP(例如日志记录或访问控制),必须正确配置 X-Real-IPX-Forwarded-For 头。

Upstream负载均衡

当后端运行多个应用实例时,可以使用 upstream 模块实现负载均衡:

upstream backend {
    # 默认轮询策略
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
    server 127.0.0.1:3003;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Nginx支持多种负载均衡策略:

# 加权轮询
upstream backend_weighted {
    server 127.0.0.1:3001 weight=3;
    server 127.0.0.1:3002 weight=2;
    server 127.0.0.1:3003 weight=1;
}

# IP Hash
upstream backend_iphash {
    ip_hash;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}

# 最少连接
upstream backend_least {
    least_conn;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}

WebSocket反向代理

WebSocket连接需要特殊的代理配置,因为它使用HTTP Upgrade机制建立持久连接:

server {
    listen 80;
    server_name ws.example.com;

    location /ws {
        proxy_pass http://127.0.0.1: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;

        # WebSocket连接超时(默认60秒会断开)
        proxy_read_timeout 86400s;
        proxy_send_timeout 86400s;
    }
}

关键配置是 proxy_http_version 1.1UpgradeConnection 头的设置。同时将 proxy_read_timeout 设置为较大值,避免空闲WebSocket连接被提前关闭。

路径代理与URL重写

将不同URL路径代理到不同的后端服务:

server {
    listen 80;
    server_name example.com;

    # API请求代理到后端API服务
    location /api/ {
        proxy_pass http://127.0.0.1:8080/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 静态文件直接由Nginx处理
    location /static/ {
        alias /var/www/static/;
        expires 30d;
    }

    # 其他请求代理到前端应用
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

注意 proxy_pass 末尾的斜杠会影响路径转发。proxy_pass http://127.0.0.1:8080/ 末尾有斜杠时,/api/users 会被转发为 /users;没有斜杠时会保留完整路径 /api/users

健康检查与故障转移

配置后端健康检查,自动排除故障节点:

upstream backend {
    server 127.0.0.1:3001 max_fails=3 fail_timeout=30s;
    server 127.0.0.1:3002 max_fails=3 fail_timeout=30s;
    server 127.0.0.1:3003 backup;  # 备用节点
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
        proxy_next_upstream error timeout http_500 http_502 http_503;
        proxy_next_upstream_tries 2;
    }
}

max_fails=3 fail_timeout=30s 表示如果30秒内失败3次,则暂时将该节点标记为不可用。proxy_next_upstream 配置了哪些错误会触发请求转发到下一个后端。

常见问题排查

# 查看Nginx错误日志排查问题
sudo tail -f /var/log/nginx/error.log
Tip: 更多教程请查看新手教程
关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工 BandwagonHost 的优惠信息、使用教程和方案对比,方便中文用户选购和使用。

新手必读
搬瓦工优惠码

当前最大折扣优惠码:

NODESEEK2026(优惠 6.77%)

在购买方案时填入优惠码即可自动抵扣。详见 优惠码使用教程