You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Varnish向上游Nginx发送PROXY协议连接?

让Varnish向上游Nginx发送PROXY协议的配置方案

核心实现逻辑

要让Varnish在转发请求到上游Nginx时带上PROXY协议头,无需额外启动参数,直接通过VCL(Varnish配置语言)即可实现,核心是利用Varnish内置的std.send_proxy()函数发送协议头。

具体配置步骤

  1. 修改Varnish的VCL配置文件
    在你的VCL文件中,添加vcl_backend_connect阶段的逻辑,用来向上游发送PROXY协议:
# 定义上游Nginx后端
backend nginx_backend {
    .host = "你的Nginx服务器IP";
    .port = "80"; # 替换为Nginx实际监听的端口
}

sub vcl_backend_connect {
    # 调用函数发送PROXY协议头,传递客户端和Varnish的IP/端口信息
    std.send_proxy(
        bereq.backend,
        std.sockaddr(client.ip, client.port),
        std.sockaddr(server.ip, server.port)
    );
}

注:如果你的Varnish版本低于6.0,也可以给后端添加.send-proxy = true参数实现,但该方式已被弃用,建议升级Varnish版本后使用上面的VCL函数写法。

  1. 配置Nginx接收PROXY协议
    上游Nginx必须开启PROXY协议支持,否则会出现解析错误。在Nginx的监听配置中添加proxy_protocol参数,同时配置真实IP获取规则:
server {
    # 开启PROXY协议监听
    listen 80 proxy_protocol;
    listen 443 ssl proxy_protocol; # 如果是HTTPS后端
    
    # 仅信任来自Varnish的PROXY协议头
    set_real_ip_from 你的Varnish服务器IP;
    real_ip_header proxy_protocol;
    
    # 其他Nginx配置(如PHP转发、SSL证书等)
}
  1. 重载Varnish配置生效
    修改完VCL后,执行以下命令重载配置:
varnishadm reload

验证方法

可以在Nginx的日志格式中添加$remote_addr字段,发起请求后查看日志,如果显示的是客户端真实IP而非Varnish的IP,说明配置成功。

内容的提问来源于stack exchange,提问作者HubertNNN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 02:24:11