Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何阻止客户端IP地址在Cloudflare/Docker/NGINX/LAMP站点中丢失?_Php_Nginx_Docker_Cloudflare - Fatal编程技术网

Php 如何阻止客户端IP地址在Cloudflare/Docker/NGINX/LAMP站点中丢失?

Php 如何阻止客户端IP地址在Cloudflare/Docker/NGINX/LAMP站点中丢失?,php,nginx,docker,cloudflare,Php,Nginx,Docker,Cloudflare,问题是在我下面的站点结构中没有设置PHP字段$\u SERVER['HTTP\u CLIENT\u IP'],我应该如何更正 Docker网桥网络(位于cloudflare后面的主机上)上名为“back”的静态IP容器: NGINX在容器中运行(172.24.02) 容器中的Apache+PHP(172.24.0.3) nginx.conf: location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_heade

问题是在我下面的站点结构中没有设置PHP字段
$\u SERVER['HTTP\u CLIENT\u IP']
,我应该如何更正

Docker网桥网络(位于cloudflare后面的主机上)上名为“back”的静态IP容器:

  • NGINX在容器中运行(172.24.02)
  • 容器中的Apache+PHP(172.24.0.3)
  • nginx.conf:

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://172.24.0.3;
    }
    
    test.php

    <?php
    
    echo('HTTP_CLIENT_IP: '.$_SERVER['HTTP_CLIENT_IP']);
    echo('<br>HTTP_X_FORWARDE‌​D_FOR'.$_SERVER['HTTP_X_FORWARDE‌​D_FOR']);
    echo('<br>REMOTE_ADDR'.$_SERVER['REMOTE_ADDR']);
    echo('<br>HTTP_X_FORWARDED'.$_SERVER['HTTP_X_FORWARDED']);
    echo('<br>HTTP_FORWARDED'.$_SERVER['HTTP_FORWARDED']);
    echo('<br>HTTP_FORWARDED_FOR'.$_SERVER['HTTP_FORWARDED_FOR']);
    
    ?>
    

    感谢@Devon提出打印$\u服务器变量的建议,以下字段中包含客户端IP:

    $_SERVER['HTTP_CF_CONNECTING_IP']
    $_SERVER['HTTP_X_FORWARDED_FOR']
    

    第一个给了
    客户机IP
    ,第二个给了
    客户机IP,cloudflare IP

    ,感谢@Devon建议打印出$\u服务器变量,结果发现以下字段中有客户机IP:

    $_SERVER['HTTP_CF_CONNECTING_IP']
    $_SERVER['HTTP_X_FORWARDED_FOR']
    

    第一个给了
    客户端IP
    ,第二个给了
    客户端IP,cloudflare IP

    您如何配置Nginx和Apache一起工作?HTTP\u客户端IP不是标准的头,REMOTE\u ADDR是IP的标准,但在代理情况下,您需要设置头。为什么不打印出所有的头文件
    print\r($\u SERVER)
    ,而不是尝试打印那些不一定与定义的头文件对齐的头文件。@Devon Apache在一个容器中的端口80上运行,nginx只需使用上述配置将请求转发给它即可传递头文件。我将尝试您的建议,重新打印整个变量Nginx和Apache如何配置为协同工作?HTTP_CLIENT_IP不是标准头,REMOTE_ADDR是IP的标准头,但在代理情况下,您需要设置头。为什么不打印出所有的头文件
    print\r($\u SERVER)
    ,而不是尝试打印那些不一定与定义的头文件对齐的头文件。@Devon Apache在一个容器中的端口80上运行,nginx只需使用上述配置将请求转发给它即可传递头文件。我将尝试你的建议,重新打印整个变量