这是我的文件的一部分/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;
}
}
我还有一个upstream
Thumbor 部分,基于本指南。这有效;我可以通过以下方式访问它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;
}
}