Chr*_*s.B 6 http nginx http-headers
当 Nginx 收到缺少 Host 标头的请求时,它会拒绝该请求并返回 400 响应。正如它应该。
有没有办法解决?
有一个硬件需要能够对我的 Nginx Web 服务器进行 REST 调用,但该设备未发送主机标头。我对此无能为力,我无法控制该设备的内部运作。
这将是唯一一个与我的 Web 服务器通信且缺少主机标头的设备,并且它将始终连接到同一位置。服务器使用基于名称的虚拟主机。
我尝试使用headers-more-nginx模块重建我的服务器,因为我相信它可以在处理请求之前向请求添加标头。我将以下行添加到该虚拟主机的 server{} 块中:
more_set_input_headers "Host: device.myserver.com";
Run Code Online (Sandbox Code Playgroud)
但请求仍然被 400 拒绝。
编辑:
我忘了提及这些设备目前能够向 lighttpd 1.4.28 Web 服务器发出请求。我正在尝试让他们在 Nginx 上工作。我在 lighttpd 配置文件中找不到任何应该允许它工作的特殊内容,似乎 lighttpd 不需要这个标头。
编辑2:
tcpdump 的结果(我删除了不应该放在网上的内容):
POST http://XXX.XXX.XXX.com/index/get-next-command HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Content-Length: 62
user=XXX&pass=XXX&v=0103HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.10-1ubuntu3.21
Set-Cookie: PHPSESSID=XXX; path=/
Set-Cookie: username=XXX; path=/
Set-Cookie: password=XXX; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-type: text/html
Transfer-Encoding: chunked
Date: Thu, 03 Dec 2015 19:37:56 GMT
Server: lighttpd/1.4.28
46
!]HdEU
{"XXX":"XXX","XXX":"XXX","parameters":[]}
0
Run Code Online (Sandbox Code Playgroud)
从这里: http: //nginx.org/en/docs/http/server_names.html
\n\n\n\n\n杂项名称
\n\n有一些服务器名称经过特殊处理。
\n\n如果需要在非默认服务器块中处理没有 \xe2\x80\x9cHost\xe2\x80\x9d 标头字段\n 的请求,则应指定\n 空名称:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nserver {\n listen 80;\n server_name example.org www.example.org "";\n ...\n}\n如果服务器块中没有定义 server_name,则 nginx 使用空名称作为服务器名称。
\n
因此,将“”添加到您的 server_name 似乎可以满足您的要求。
\n| 归档时间: |
|
| 查看次数: |
8821 次 |
| 最近记录: |