我怎样才能让Nginx听所有的主机名称,而不是特定的?

这是我的/etc/nginx/nginx.conf文件的一部分。 (我稍微修改了一下,以便不公开实际的IP地址或DNS条目,但你明白了。)

 server { listen 80; server_name ec2-52-1-2-3.compute-1.amazonaws.com; location / { proxy_pass http://thumbor; } } server { listen 80; server_name 52.1.2.3; location / { proxy_pass http://thumbor; } } 

根据本指南 ,我还有一个thumbor的upstream部分。 这工作; 我可以通过http://ec2-52-1-2-3.compute-1.amazonaws.com/或通过http://52.1.2.3/访问它…

不过,我觉得它现在的设置方式有点脆弱。 如果IP地址改变怎么办? 或者如果DNS条目改变了呢? 我宁愿如果它只是响应80端口上的所有请求,而不pipe主机名。

所以我自然而然地尝试这样做:

 server { listen 80; location / { proxy_pass http://thumbor; } } 

正如你可以看到我所做的一样,把它分成了一个单独的server部分,而不是两个,我从该部分删除了server_namevariables。 但不是像我希望的那样回应所有的请求,它不再有任何回应。 它会在404上的一切。

我如何设置一个通用服务器侦听器,就像我在这里描述的那样?

不需要正则expression式。 您可以通过将default_server添加到listen指令来执行此操作,如下所示: listen 80 default_server; 。 这指向如果请求针对服务器IP但是没有主机名匹配时要应用的configuration。

等等…我意识到你可以使用正则expression式。 我结束了做我的单个server部分:

 server { listen 80; server_name ~^.+$; location / { proxy_pass http://thumbor; } }