Nginx 混合名称和基于 IP 的主机

Nginx 混合名称和基于 IP 的主机

我想将我的网站托管在单独的 IP 地址上(由于 SNI)。我使用托管在 AWS EC2 上的 nginx docker 镜像。当我将其设置为:

server {
  listen <MY_IP>:80;
  server_name <MY_HOST>.com;
  return 301 https://google.com;
}

即使域 DNS A 条目设置为,它也永远不会解析到此部分<MY_IP>。它始终解析为托管在其他 IP 地址上的默认设置:

server {
  listen 80 default_server;
  server_name _;
  ...
}

是否可以混合使用 IP 和基于名称的主机?是否可以以某种方式调试 nginx 解析的内容及其原因?

答案1

如果从第一个服务器子句中的 listen 指令中删除该部分,那么 nginx 将会把包含带有 .com 的 Host: 标头的请求匹配到第一个服务器配置,把包含其他 Host: 标头的请求匹配到第二个默认服务器配置。

此外,SNI 适用于 HTTPS/TLS 服务,而不适用于 HTTP 服务,并且它特别支持从同一 IP 为多个主机提供服务。

相关内容