nginx配置代理服务器

发布于:2025-08-14 ⋅ 阅读:(14) ⋅ 点赞:(0)

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

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

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

基础配置示例(代理单个后端服务)
# 全局配置
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 前缀)。

高级:代理多个服务(按路径区分)
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隐藏),配置较少见。

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 证书:

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. 检查配置是否正确

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

    nginx -s reload  # 平滑重启(不中断现有连接)
    

核心总结

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

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


网站公告

今日签到

点亮在社区的每一天
去签到