我想将我的网站托管在单独的 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 为多个主机提供服务。