Nginx – 允许没有主机头的请求

当Nginx收到一个缺lessHost头部的请求时,它会以400的响应拒绝它。 正如它应该。

有没有办法解决?

有一个硬件需要能够对我的Nginxnetworking服务器进行REST调用,但是这个设备没有发送一个主机头。 我无能为力,我无法控制这个装置的内部运作。

这将是唯一的设备与我的networking服务器通信,缺乏一个主机头,并将始终连接到相同的位置。 服务器正在使用基于名称的虚拟主机。

我已经尝试使用headers-more-nginx模块重build我的服务器,因为我相信它可以在处理之前将请求头添加到请求中。 我将下面一行添加到此虚拟主机的服务器块:

more_set_input_headers "Host: device.myserver.com"; 

但是请求仍然被400拒绝。

编辑:

我忘了提及这些设备目前能够向lighttpd 1.4.28 Web服务器发出请求。 我试图让他们在Nginx上工作。 我在lighttpdconfiguration文件里找不到任何特别的东西,应该让这个工作起作用,好像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 

从这里: http : //nginx.org/en/docs/http/server_names.html

杂项名称

有一些专门处理的服务器名称。

如果需要在非默认服务器块中处理没有“主机”头字段的请求,则应指定一个空的名称:

 server { listen 80; server_name example.org www.example.org ""; ... } 

如果服务器块中没有定义server_name,那么nginx使用空的名称作为服务器名称。

所以join“”到你的server_name似乎做你想要的。