【问题标题】:Nginx sever block not function as expectedNginx 服务器块未按预期运行
【发布时间】:2021-03-25 09:17:54
【问题描述】:

我在 nginx 中使用这个配置文件:

server {
        listen 80;
        server_name harrybilney.co.uk;

        location / {
                proxy_pass http://localhost:8080;
        }
}

server {
        listen 80;
        server_name kyra-mcd.co.uk;

        location / {
                proxy_pass http://localhost:8080;
        }
}

存储在/etc/nginx/sites-avaliable 中。域 kyra-mcd.co.uk 的服务器块按预期工作,但 harrybilney.co.uk 的服务器块没有,我的浏览器找不到 harrybilney.co.uk 的服务器。

这两个域都由 GoDaddy 托管,并且具有完全相同的 DNS 设置指向我的静态 IP(带有 A 和 AAAA 记录的 IPv4 和 IPv6)。

谁能解释我为什么会遇到这个问题,因为我尝试更改配置但运气不错。我知道这是 nginx 的一个非常基本的配置文件,但现在我只是想让两个域在我的 1 个静态 IP 上工作,然后再添加任何复杂的东西。

【问题讨论】:

  • @BijayRegmi 这是错误的!这里什么都不会被覆盖。 NGINX 将在启动时读取所有配置文件并保存一个配置对象,如果你想在menory 中命名。所以没有理由有一个单独的文件!
  • sudo nginx -T 的输出是什么。所以你可以使用return 200 "$host\n;"代替proxy_pass,然后使用curl进行测试。 curl -v http://kyra-mcd.co.uk 将打印出 kyra-mcd.co.uk
  • 这可能是 DNS 传播,我测试过,它们都可以在 curl 上正常工作

标签: nginx


【解决方案1】:

将两个 server 块放在一个文件中没有问题!

这是一个 default.conf 文件:

server {
  listen 80;
  server_name harrybilney.co.uk;

  location / {
    return 200 "$host\n";
  }
}


server {
  listen 80;
  server_name kyra-mcd.co.uk;

  location / {
    return 200 "Host should match kyra-mcd.co.uk = $host\n";
  }

}

通过发出 sudo nginx -t && sudo nginx -s reload 测试并重新加载您的配置

卷曲测试:

$# curl -H "Host: kyra-mcd.co.uk" localhost
Host should match kyra-mcd.co.uk = kyra-mcd.co.uk
$# curl -H "Host: harrybilney.co.uk" localhost
harrybilney.co.uk

如您所见,两台服务器都在一个文件中,server_name 负责根据 Host 标头查找正确的服务器块。

再次检查您的 DNS。值得一提:

kyra-mcd.co.uk.     600 IN  A   90.255.228.109
harrybilney.co.uk.  3600    IN  A   90.255.228.109

我也觉得不错。所以流量应该到达服务器。

所以你的配置对我来说看起来不错。通过发出 sudo nginx -T 确保所有内容都已加载。

curl 正在为我工​​作。所以看起来问题与您的 DNS 有关。您能否确认curl 也从您的角度工作?

【讨论】:

    猜你喜欢
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2016-03-28
    • 2021-04-08
    相关资源
    最近更新 更多