nginx怎样配置反向代理

联启 网络工具 13

本文目录导读:

nginx怎样配置反向代理-第1张图片-电脑手机工具软件下载 - 免费实用工具合集 | 联启科技

  1. 基础反向代理配置
  2. 常见配置场景
  3. 高级配置
  4. 常用配置参数说明
  5. 配置示例:前后端分离部署
  6. 配置检查与重载
  7. 配置注意事项

我来详细介绍Nginx反向代理的配置方法。

基础反向代理配置

最简单的反向代理

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://localhost:3000;  # 代理到本地的Node.js应用
        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;
    }
}

常见配置场景

场景1:代理到不同端口

# 将不同路径代理到不同服务
server {
    listen 80;
    server_name api.example.com;
    # API服务
    location /api/ {
        proxy_pass http://localhost:8080/;
        proxy_set_header Host $host;
    }
    # 前端服务
    location / {
        proxy_pass http://localhost:3000/;
        proxy_set_header Host $host;
    }
}

场景2:负载均衡

upstream backend_servers {
    # 轮询(默认)
    server backend1.example.com weight=3;  # weight设置权重
    server backend2.example.com weight=2;
    server backend3.example.com;
    # 其他负载策略
    # least_conn;    # 最少连接
    # ip_hash;       # IP哈希(会话保持)
}
server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://backend_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

场景3:WebSocket代理

server {
    listen 80;
    server_name ws.example.com;
    location /ws/ {
        proxy_pass http://localhost:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 86400;  # 超时时间设置
    }
}

高级配置

配置缓存

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;
server {
    listen 80;
    server_name example.com;
    location / {
        proxy_cache my_cache;
        proxy_cache_key "$scheme$request_method$host$request_uri";
        proxy_cache_valid 200 302 60m;
        proxy_cache_valid 404 1m;
        proxy_cache_min_uses 3;
        proxy_pass http://localhost:3000;
        # 缓存绕过
        proxy_cache_bypass $http_pragma;
        proxy_cache_bypass $http_authorization;
        add_header X-Cache-Status $upstream_cache_status;
    }
}

HTTPS反向代理

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Ssl on;
    }
}
# HTTP重定向到HTTPS
server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

常用配置参数说明

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;
    proxy_set_header X-Forwarded-Proto $scheme;
    # 超时设置
    proxy_connect_timeout 30s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;
    # 缓冲区设置
    proxy_buffering on;
    proxy_buffer_size 4k;
    proxy_buffers 8 4k;
    proxy_busy_buffers_size 8k;
    # 大小限制
    client_max_body_size 10m;
}

配置示例:前后端分离部署

server {
    listen 80;
    server_name www.example.com;
    # 静态资源 - 直接由Nginx处理
    location /static/ {
        alias /app/static/;
        expires 7d;
        add_header Cache-Control "public, immutable";
    }
    # 媒体文件
    location /uploads/ {
        alias /app/uploads/;
        expires 30d;
    }
    # API请求 - 代理到后端
    location /api/ {
        proxy_pass http://localhost:8080/api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # API限流
        limit_req zone=api_limit burst=20 nodelay;
        limit_req_status 429;
    }
    # 前端页面 - 代理到Vue/React开发服务器
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header X-Forwarded-For $remote_addr;
        # SPA路由支持
        try_files $uri $uri/ /index.html;
    }
}

配置检查与重载

# 检查配置语法
nginx -t
# 重载配置
nginx -s reload
# 重启Nginx
systemctl restart nginx

配置注意事项

  1. 路径处理proxy_pass 末尾的 很重要

    • proxy_pass http://backend; - 完整路径
    • proxy_pass http://backend/; - 去掉匹配的location路径
  2. 请求头传递:确保正确设置Host和真实IP

  3. 超时设置:根据应用需求调整超时时间

  4. SSL配置:生产环境必须使用HTTPS

这些配置覆盖了大多数反向代理场景,你可以根据具体需求进行调整。

标签: nginx配置

抱歉,评论功能暂时关闭!