apache-2.2 – Varnish client.ip说127.0.0.1

前端之家收集整理的这篇文章主要介绍了apache-2.2 – Varnish client.ip说127.0.0.1前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

所以我有一个像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中使用它.

原文链接:https://www.f2er.com/nginx/435115.html

猜你在找的Nginx相关文章