nginx配置代理服务器

Nginx 作为代理服务器时,主要用于反向代理 (最常用,转发客户端请求到后端服务)或正向代理(较少用,为客户端提供访问外部网络的代理)。以下是两种场景的具体配置示例:

一、反向代理配置(最常用)

反向代理是 Nginx 最核心的功能之一,用于将客户端请求转发到后端的应用服务器(如 Java、Node.js、Python 服务等),可隐藏后端服务地址、实现负载均衡、SSL 终结等。

基础配置示例(代理单个后端服务)
nginx 复制代码
# 全局配置
worker_processes auto; # 自动设置工作进程数(通常等于CPU核心数)
events {
    worker_connections 1024; # 每个工作进程的最大连接数
}

http {
    include mime.types; # 引入MIME类型映射
    default_type application/octet-stream;

    # 反向代理核心配置
    server {
        listen 80; # 监听80端口(HTTP)
        server_name example.com; # 代理服务器域名(客户端访问的域名)

        # 所有请求都转发到后端服务
        location / {
            # 后端服务地址(协议://IP:端口,如Node.js服务、Java服务等)
            proxy_pass http://127.0.0.1:3000; 

            # 传递客户端真实IP和请求头(重要)
            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 60s; # 连接后端超时
            proxy_read_timeout 60s;    # 读取后端响应超时
            proxy_send_timeout 60s;    # 发送请求到后端超时
        }
    }
}
配置说明:
  1. proxy_pass :指定后端服务地址(必须),格式为 协议://IP:端口协议://域名

    • 示例:proxy_pass http://127.0.0.1:3000 表示转发到本地3000端口的服务。
    • 注意:proxy_pass 后是否带 / 影响路径拼接(见下方"路径匹配规则")。
  2. proxy_set_header:传递客户端请求头到后端,避免后端服务获取不到真实客户端信息(如 IP、Host)。

    • Host $host:传递客户端访问的域名(如 example.com)。
    • X-Real-IP $remote_addr:传递客户端真实 IP。
  3. 超时设置:防止后端服务无响应时 Nginx 长期等待,避免连接泄露。

路径匹配规则(proxy_pass/ vs 不带 /
  • 场景1location /api + proxy_pass http://backend(不带 /

    客户端请求 http://example.com/api/user → 转发到 http://backend/api/user(保留 /api 前缀)。

  • 场景2location /api + proxy_pass http://backend/(带 /

    客户端请求 http://example.com/api/user → 转发到 http://backend/user(去掉 /api 前缀)。

高级:代理多个服务(按路径区分)
nginx 复制代码
server {
    listen 80;
    server_name example.com;

    # 1. 代理API服务(路径以/api开头)
    location /api {
        proxy_pass http://127.0.0.1:8080; # 后端API服务(如Java SpringBoot)
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 2. 代理前端静态资源(路径以/static开头)
    location /static {
        proxy_pass http://127.0.0.1:8000; # 前端服务(如Node.js静态服务器)
        proxy_set_header Host $host;
    }

    # 3. 其他请求默认返回404
    location / {
        return 404;
    }
}

二、正向代理配置(客户端代理)

正向代理用于为客户端提供访问外部网络的代理(如科学上网、客户端IP隐藏),配置较少见。

nginx 复制代码
http {
    # 正向代理核心配置
    server {
        listen 8888; # 客户端需连接的代理端口

        # 允许客户端通过代理访问任意域名
        resolver 8.8.8.8; # DNS resolver(使用谷歌DNS解析外部域名)

        location / {
            # 正向代理到客户端请求的目标地址
            proxy_pass http://$http_host$request_uri;

            # 支持HTTPS代理(需配置SSL隧道)
            proxy_connect_timeout 10s;
            proxy_send_timeout 10s;
            proxy_read_timeout 10s;
        }
    }
}
使用方式:

客户端(如浏览器、curl)需手动设置代理为 http://代理服务器IP:8888,即可通过该代理访问外部网络。

三、配置SSL(HTTPS代理)

若需要代理 HTTPS 请求(客户端通过 https://example.com 访问),需配置 SSL 证书:

nginx 复制代码
server {
    listen 443 ssl; # 监听443端口(HTTPS)
    server_name example.com;

    # SSL证书配置(替换为实际证书路径)
    ssl_certificate /path/to/cert.pem;   # 公钥证书
    ssl_certificate_key /path/to/key.pem; # 私钥

    # 代理到后端HTTP服务(Nginx终结SSL,后端用HTTP通信)
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# 可选:HTTP自动跳转到HTTPS
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

四、配置检查与生效

  1. 检查配置是否正确

    bash 复制代码
    nginx -t  # 输出 "syntax is ok" 表示配置无误
  2. 重启Nginx生效

    bash 复制代码
    nginx -s reload  # 平滑重启(不中断现有连接)

核心总结

  • 反向代理 :用于服务器端转发请求到后端服务,配置核心是 location + proxy_pass + 头信息传递。
  • 正向代理 :用于客户端代理,需配置 resolver 和代理端口。
  • 注意路径匹配规则和超时设置,生产环境建议配置 SSL 证书。

根据实际需求修改 server_nameproxy_pass 地址、端口和路径即可。

相关推荐
一叶知秋yyds44 分钟前
Ubuntu 虚拟机安装 OpenClaw 完整流程
linux·运维·ubuntu·openclaw
瀚高PG实验室44 分钟前
审计策略修改
网络·数据库·瀚高数据库
forAllforMe1 小时前
etherCAT的协议VoE,FoE,EoE,CoE的概念和区别
网络
斯普信云原生组1 小时前
Prometheus 环境监控虚机 Redis 方案(生产实操版)
运维·docker·容器
大数据新鸟2 小时前
操作系统之虚拟内存
java·服务器·网络
迷藏4942 小时前
**eBPF实战进阶:从零构建网络流量监控与过滤系统**在现代云原生架构中,**网络可观测性**和**安全隔离**已成为
java·网络·python·云原生·架构
zmj3203242 小时前
汽车电子内部网络架构图
网络·汽车
safestar20122 小时前
ES批量写入性能调优:BulkProcessor 参数详解与实战案例
java·大数据·运维·jenkins
来一颗砂糖橘3 小时前
负载均衡的多维深度解析
运维·负载均衡
楠奕3 小时前
CentOS7安装GoldenDB单机搭建及常见报错解决方案
linux·运维·服务器