关于HTTP_X_FORWARDED_HOST

转载 2012年03月30日 15:06:05

今天在看Xweibo的源码,发现了用$_SERVER['HTTP_X_FORWARDED_HOST']来判断主机的地址,就目前来说很多人都是直接通过$_SERVER['HTTP_HOST']来判断的,但是通过代理的话就有问题了,请看下面的问题描述:

在php中,我们一般通过$_SERVER['HTTP_HOST']来活得URL中网站的域名或者ip地址。

  1. php手册中的解释如下:  
  2. “HTTP_HOST”  
  3. 当前请求的 Host: 头信息的内容。  

一般来说,这样子不会遇到什么问题,在一些常见的php框架中,如PFC3和FLEA也是基于该预定义变量。

然而最近在做的一个项目,程序移交到客户手里测试时,竟然发现程序的跳转总是会出错。

最后找出原因:$_SERVER['HTTP_HOST']在客户的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。

究其原因,是因为,客户的公司通过一台服务器连接至因特网,而我们的程序所在的服务器,是通过域名映射出来的,也就是中间有个“代理”的过程。因此$_SERVER['HTTP_HOST']在这样的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。

在PHP手册中评论中也提到了这个:

Be careful with HTTP_HOST behind a proxy server.   Use these instead.
[HTTP_X_FORWARDED_FOR]
[HTTP_X_FORWARDED_HOST]
[HTTP_X_FORWARDED_SERVER]

In my situation, I used [HTTP_X_FORWARDED_SERVER] in place of [HTTP_HOST] in order get the machine and hostname (www.myurl.com)

最终解决方案:

 

$host    = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'].($_SERVER['SERVER_PORT']=='80' ? '' : ':'.$_SERVER['SERVER_PORT']));



 


 


相关文章推荐

apache反向代理tomcat时x-forwarded-for为null的问题

apache 在用ProxyPass时会自动在header中设置X-Forwarded-For X-Forwarded-Host和X-Forwarded-Server 如果tomcat后端不做设置,...

关于HTTP_X_FORWARDED_HOST

今天在看Xweibo的源码,发现了用$_SERVER['HTTP_X_FORWARDED_HOST']来判断主机的地址,就目前来说很多人都是直接通过$_SERVER['HTTP_HOST']来判断的,...
  • xanxng
  • xanxng
  • 2012年05月24日 11:45
  • 2487

PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解,$_SERVER['HTTP_X_FORWARDED_HOST']

uchome的index文件中的二级域名功能判断,使用了php的$_SERVER['HTTP_HOST'],开始对这个不是很了解,所以百度了一下,发现一篇帖子有点意思,转发过来做个记录。 在ph...

HTTP_X_FORWARDED_FOR获取到的IP地址

使用“HTTP_X_FORWARDED_FOR”获取到的IP地址,有以下几种情况。 ①没有使用代理服务器: REMOTE_ADDR = 您的 IP HTTP_VIA = 没数值或不显示 HTTP...
  • ccfxue
  • ccfxue
  • 2017年06月24日 18:51
  • 219

Nginx服务器中 Laravel 项目部署到目录 404错误

vi usr/local/nginx/conf/nginx.conf 在server {}里加上 location / { try_files $uri $uri/ /index.php...
  • fatong3
  • fatong3
  • 2016年12月06日 21:21
  • 1488

MySQL设置密码的三种方法

其设置密码有三种方法:a. ./mysqladmin -u root -p oldpassword newpasswd(记住这个命令是在/usr/local/mysql/bin中外部命令)b. SET...

firefox http x forwarded for参数工具

  • 2013年12月18日 17:56
  • 5KB
  • 下载

HTTP 请求头中的 X-Forwarded-For

转自:https://imququ.com/post/x-forwarded-for-header-in-http.html HTTP 请求头中的 X-Forwarded-For ...

获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR)

分析过程 这个来自一些项目中,获取用户Ip,进行用户操作行为的记录,是常见并且经常使用的。 一般朋友,都会看到如下通用获取IP地址方法。 function getIP() { if...

HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR的使用 php

原文网址 : http://qq398705749.iteye.com/blog/963818 php中HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR的使用  1.REMOTE_...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于HTTP_X_FORWARDED_HOST
举报原因:
原因补充:

(最多只允许输入30个字)