加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

apache-2.2 – Varnish client.ip说127.0.0.1

发布时间:2020-12-13 21:09:10 所属栏目:Nginx 来源:网络整理
导读:所以我有一个像Nginx的设置 >清漆 >的Apache2 如果我收到带有静态文件的请求,它会通过nginx发送到varnish并再次返回到nginx,因为它比让apache2服务器快得多.我的问题是,当我做一个 sub vcl_fetch { set beresp.http.X-Tabulex-Client = client.ip; 看看客户

所以我有一个像Nginx的设置 – >清漆 – >的Apache2
如果我收到带有静态文件的请求,它会通过nginx发送到varnish并再次返回到nginx,因为它比让apache2服务器快得多.我的问题是,当我做一个

sub vcl_fetch {
    set beresp.http.X-Tabulex-Client = client.ip;

看看客户端IP地址是什么我被告知它的127.0.0.1(X-Tabulex-Client 127.0.0.1)在vcl_recv我有:

sub vcl_recv {
    if ((!req.url ~"^/typo3temp/*" && !req.url ~"^/typo3/*") &&req.url ~".(jpg|css|gif|png|js)(?.*|)$"){
        set req.backend = aurum;
        set client.identity = req.http.X - Forwarded - For;
    } elseif(client.ip == "192.168.3.189") {
        /* Traffic from the other Varnish server,serve using real backends */
        set req.backend = balance;
        /* Set client.identity to the X-Forwarded-For (the real IP) */
        set client.identity = req.http.X - Forwarded - For;
    } else{
        /* Traffic coming from internet,use the other Varnish as backend */
        set req.backend = iridium;
    }
}

nginx配置包含

proxy_set_header  X-Real-IP  $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_intercept_errors on;

第一次发送到清漆时,再次收到清漆时没有任何内容.

我不知道问题在哪里.我希望client.ip包含外部ip地址,所以我可以用它来进行acl.有任何想法吗?

最佳答案
client.ip的值是127.0.0.1,因为nginx是客户端. Varnish掩盖这个值是没有意义的 – 即使在像你这样的Varnish坐在前端代理后面的情况下,你经常想要根据实际连接到Varnish的东西的ip地址作出决定.

您真正想要做的是让nginx将远程客户端IP地址放入专用标头(您已经在使用X-Real-IP)并使用它来做出连接决策.我们在我们的环境中做到这一点,我们让Apache在清漆前提供SSL连接,然后我们使用此标头来做出访问决策.

它不如使用client.ip(使用acls无法匹配),但它有效.我们做这样的事情:

if (! (
        req.http.X-Real-IP ~ "^10." ||
        req.http.X-Real-IP ~ "^100.100." ||
        req.http.X-Real-IP ~ "^200.200."
)) {
        error 403 "Forbidden";
}

Varnish没有提供使用自定义标头覆盖client.ip的本机机制,但无论如何都可以解决问题,因为您可以在配置中插入任意C代码.

Here是一个与您的情况完全相同的示例,其中包括将client.ip替换为另一个值的示例,以便可以在Varnish ACL中使用它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读