宝塔面板反向代理后获取不到真实IP怎么办_配置set_real_ip_from

秋静吖_7220

秋静吖_7220

2026-04-24

458人浏览

原创

根本原因是real_ip机制需set_real_ip_from、real_ip_header、real_ip_recursive三指令协同且置于server块顶部;cdn未开启ip透传、fastcgi_param remote_addr未指向$remote_addr或ip段配置错误也会导致失败。

宝塔面板反向代理后获取不到真实ip怎么办_配置set_real_ip_from

为什么加了 set_real_ip_from 还是拿不到真实IP

根本原因不是没加,而是加得不完整或位置不对。Nginx 的 real_ip 机制依赖三个指令协同生效:set_real_ip_from、real_ip_header、real_ip_recursive,缺一不可,且必须放在 server { 块最顶部(任何 location 之前)。宝塔里常有人把它们塞进 location / { 里,结果完全不触发。

常见错误现象包括:$_SERVER['REMOTE_ADDR'] 仍是 CDN 节点 IP 或内网 IP;日志里 $remote_addr 没变;nginx -t 测试通过但实际无效。

  • set_real_ip_from 必须精确填写你信任的代理 IP 段(如 Cloudflare、腾讯云 CDN、又拍云等公布的回源段),不能写 0.0.0.0/0 图省事——这等于放弃安全校验
  • real_ip_header 要和 CDN 实际发送的头一致:多数用 X-Forwarded-For,Cloudflare 默认用 CF-Connecting-IP,部分厂商只发 X-Real-IP
  • real_ip_recursive on 在多级代理(比如「用户 → CDN → Nginx → PHP-FPM」)时必须开启,否则只取最左一个 IP,可能仍是上一级代理 IP

怎么确认 CDN 到底发了哪个头

别猜,直接看请求原始头。在站点根目录放一个临时调试页:ipdebug.php,内容为:

<?php var_dump(
  $_SERVER['HTTP_X_FORWARDED_FOR'] ?? 'MISSING',
  $_SERVER['HTTP_X_REAL_IP'] ?? 'MISSING',
  $_SERVER['HTTP_CF_CONNECTING_IP'] ?? 'MISSING',
  $_SERVER['REMOTE_ADDR']
);

访问这个页面,观察输出。如果某一项显示真实 IP(比如 "1.2.3.4"),就说明 CDN 正确传递了该头;如果全是空或显示 CDN 节点 IP,说明 CDN 配置没开透传,或你填错了 real_ip_header。

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载
  • Cloudflare 用户优先检查 HTTP_CF_CONNECTING_IP,它比 X-Forwarded-For 更可靠(不会被伪造拼接)
  • 阿里云 CDN、腾讯云 CDN 默认只加 X-Real-IP,不是 X-Forwarded-For,填错就白配
  • 有些 CDN(如部分自建反代)可能只传 X-Forwarded-For 且带多个 IP,此时 real_ip_recursive on 才能跳过中间节点取到最左真实 IP

PHP 层为什么还是读不到 $_SERVER['REMOTE_ADDR']

因为 Nginx 改的是内部变量 $remote_addr,但 PHP 能否拿到,取决于 FastCGI 参数有没有把它透传过去。宝塔默认配置里通常有这一行:

fastcgi_param REMOTE_ADDR $remote_addr;

但如果手动改过配置、用了第三方模板、或删过 fastcgi_param 区块,这行很可能丢失或被写成 fastcgi_param REMOTE_ADDR $http_x_forwarded_for; —— 后者极危险,会把伪造头直接当真实 IP。

  • 打开站点配置文件,搜索 fastcgi_param REMOTE_ADDR,确保它指向 $remote_addr,不是 $http_x_forwarded_for 或其他变量
  • 如果找不到这行,手动加在 location ~ \.php$ { 块内、include fastcgi.conf; 之后(避免被覆盖)
  • 改完必须「重载 Nginx」,不是「保存」就行;且要确认 PHP-FPM 没缓存旧环境变量(可重启 PHP 服务验证)

CDN IP 段怎么找、要不要自动更新

Cloudflare、阿里云、腾讯云等都会定期更新回源 IP 段,硬编码写死迟早失效。比如 Cloudflare 官方 IP 列表每月可能新增/删减子网,写死一段半年后大概率漏掉新节点。

  • Cloudflare:从 https://www.cloudflare.com/ips-v4 和 /ips-v6 动态获取,建议用脚本定期拉取并生成 set_real_ip_from 规则(宝塔有插件支持自动同步)
  • 腾讯云 CDN:查文档「回源 IP 段」章节,注意区分「全站加速」和「静态加速」的 IP 不同
  • 阿里云 CDN:控制台「域名管理 → 源站信息」里有「回源 IP 段」按钮,点开复制即可
  • 自建反向代理(如 Nginx 反代另一台服务器):只需写 set_real_ip_from 192.168.1.100; 这类具体 IP,不用掩码

最易忽略的一点:即使所有配置都对,如果 CDN 服务商在控制台没开启「传递客户端真实 IP」开关(很多 CDN 默认关闭),那 Nginx 根本收不到任何相关 header——先去 CDN 后台翻一遍设置,比调 Nginx 配置更优先。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

宝塔面板

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

10624

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

6221

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2135

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3928

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4634

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3631

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

5197

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

4082

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

12002

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
宝塔入门指引手册
宝塔入门指引手册

共0课时 | 0人学习

宝塔官方实践教程
宝塔官方实践教程

共0课时 | 0人学习