温馨提示×

debian nginx如何做反向代理

小樊
39
2026-10-06 12:25:41
栏目: 智能运维

在 Debian 上使用 Nginx 做反向代理 是非常常见的做法,通常用于把请求转发到后端服务(如 Node.js、Python、Java、Docker 等)。

下面从 安装 → 配置 → 示例 → 常用优化 一步步说明。


一、安装 Nginx(Debian)

sudo apt update
sudo apt install nginx -y

启动并设置开机自启:

sudo systemctl enable nginx
sudo systemctl start nginx

确认状态:

sudo systemctl status nginx

二、Nginx 反向代理基本原理

反向代理核心配置指令:

proxy_pass http://后端地址;

例如:

  • 浏览器访问 http://example.com
  • Nginx 转发到 http://127.0.0.1:3000

三、基础反向代理示例(最常用)

示例:代理到本地 3000 端口(如 Node.js)

编辑站点配置:

sudo nano /etc/nginx/sites-available/example.com

配置内容:

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

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

启用站点:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

测试并重载:

sudo nginx -t
sudo systemctl reload nginx

四、代理到 Docker 容器

如果后端在 Docker 中运行(如容器端口 8080):

location / {
    proxy_pass http://127.0.0.1:8080;
}

或使用 Docker 网络 IP(不推荐直接用容器 IP)。


五、HTTPS(推荐)

使用 Let’s Encrypt(免费证书)

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com

Certbot 会自动修改 Nginx 配置并启用 443。


六、常见反向代理场景

1️⃣ 代理 API 接口

location /api/ {
    proxy_pass http://127.0.0.1:5000/;
}

⚠️ 注意 proxy_pass 末尾的 / 会影响路径拼接。


2️⃣ WebSocket 代理

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";
}

3️⃣ 负载均衡(多后端)

upstream backend {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

七、常见问题排查

1️⃣ 502 Bad Gateway

  • 后端服务没启动
  • proxy_pass 地址错误
  • 防火墙/端口未开放

检查:

curl http://127.0.0.1:3000

2️⃣ 静态资源 404

  • 确认 location 是否匹配
  • 是否误代理了静态目录

3️⃣ 日志位置

/var/log/nginx/access.log
/var/log/nginx/error.log

八、最小可用模板(复制即用)

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

如果你愿意,可以告诉我:

  • 后端是什么(Node / Python / Java / Docker)
  • 是否要 HTTPS
  • 是否要子路径代理(如 /api)

我可以直接帮你写一份 可用配置。

0 踩