nginx怎么获取请求行中host的值

请教个问题,我想要获取http请求中在请求行中的host(下面请求的reallink.com)

GET http://reallink.com/abc HTTP/1.1
Host: wronglink.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate

用nginx内置变量$host,没有获取到请求行中的host,只获取到head头中的host,请问有什么办法可以获取请求行中的host吗?


按照 @Medicean 的回答:

抓包发现测试工具果然修改了HTTP请求包:
图片描述

试了下burpsuit是可以成功的!感谢各位!

阅读 12.1k
6 个回答

应该是你所使用的那个发包的工具自己修改了 HTTP 包。使用 nc 来看一下 server 端接收到的具体的 HTTP 包是什么。

我刚试了一下 nginx 最新版本,在 BurpSuite 里面重放了一下, $host 的值是从请求行中获取的。

burp

$hostname

?

$http_host 能获取到。

可以这么测试, 在 nginx 站点配置中加入

server_name t1.cc, t2.cc;
add_header Via $http_host;

绑host后,分别用t1.cc, t2.cc访问, 可以看到返回头信息中Via字段分别为对应的域名。

你这个HTTP头不对
GET / HTTP/1.1
HOST: ...
直接用 $host就可以了

可以将host变成一个url其中一个参数,xxx.com?host=wronglink.com nginx上面用$query_name来获取即可

你这个HTTP请求结构有问题,正确的是这样的:

GET /abc HTTP/1.1
Host: wronglink.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate

请求行中不会包含Host,只包含请求的URI,Host是在请求Header中。

如果你想获取URI,可以用Nginx的$request_uri

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题