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

我怎样才能让 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;
    }
}

我还有一个upstreamThumbor 部分,基于本指南。这有效;我可以通过以下方式访问它http://ec2-52-1-2-3.compute-1.amazonaws.com/...或者通过http://52.1.2.3/...

但是我觉得它目前的设置方式有点脆弱。如果 IP 地址发生变化怎么办?或者如果 DNS 条目发生变化怎么办?我更希望它只响应端口 80 上的所有请求,而不管主机名是什么。

因此我自然而然地尝试这样做:

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

如您所见,我所做的就是将其缩减为一个server部分而不是两个部分,并server_name从该部分中删除了变量。但它并没有像我希望的那样响应所有请求,而是不再响应任何请求。它会对所有请求都返回 404。

我如何设置像我在这里描述的通用服务器监听器?

答案1

无需正则表达式。您可以通过附加default_server到 listen 指令来实现,如下所示:listen 80 default_server;。这指向当请求指向服务器 IP 但没有匹配的主机名时要应用的配置。

答案2

等一下...我意识到可以使用正则表达式后就明白了。我最终将其作为我的单个server部分:

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

相关内容