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

标签 php nginx docker cloudflare

问题是我的以下站点结构中未设置PHP字段$_SERVER['HTTP_CLIENT_IP'],我该如何纠正呢?

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

  • 在容器中运行的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']);
    
    ?>
    

    运行上面的结果:
    HTTP_CLIENT_IP: 
    HTTP_X_FORWARDE‌​D_FOR: 
    REMOTE_ADDR: 172.24.0.2
    HTTP_X_FORWARDED: 
    HTTP_FORWARDED: 
    HTTP_FORWARDED_FOR:
    

    最佳答案

    感谢@Devon提供打印$ _SERVER变量的建议,事实证明以下字段中包含客户端IP:

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

    第一个给出了client IP,第二个给出了client IP, cloudflare IP

    关于php - 如何阻止客户端IP地址在Cloudflare/Docker/NGINX/LAMP站点中丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41080910/

    相关文章:

    javascript - 验证 PHP 和 JavaScript 中的表单

    php - 如何从 php 获取选定的单选按钮值 onclick

    docker - 如何在同一个 docker 容器中运行 nginx 和 gunicorn

    docker - docker如何在容器中为进程分配内存?

    php - 如何为 PHP $_GET 数组查询 MySQL 数据库

    php - 在 PHP 中将 mysql 信息从一个页面移动到另一个页面

    ubuntu - Windows + VirtualBox + Ubuntu + Docker + Nginx 权限

    NGINX $request_uri 与 $uri

    docker - 相同局域网内的外部机器无法监听docker内部的ROS节点

    node.js - Node 应用程序错误 - 无法替换配置中的 env : ${NPM_TOKEN}