【问题标题】:Stop nginx from ignoring specific subdomain in server block阻止 nginx 忽略服务器块中的特定子域
【发布时间】:2022-01-24 21:57:49
【问题描述】:

我已经在 Ubuntu 20 上使用 nginx 几年了,现在几乎没有问题,但是在新部署的服务器上,我似乎无法做到这一点。

我在 /sites_available 中名为 alpha 的文件中有一个服务器块。服务器块的 server_name alpha.example.com 设置为文档根 = /var/www/alpha。

我在 /sites_available 中名为 beta 的文件中有一个服务器块。服务器块的 server_name beta.example.com 设置为文档根 = /var/www/beta。

alpha.example.com 和 beta.example.com 都存在 DNS 记录。

会发生什么:

URL http://beta.example.com 在浏览器地址中显示 http://beta.example.com,但从 /var/www/alpha 中提取内容。

通过实验,我发现 nginx 始终在处理sites_available 中按字母顺序排列的文件,而不管 URL 中的子域如何。

可能的问题是, 为什么它会这样?和 如何关闭它?

我想要的行为是让每个服务器块将单个子域路由到特定的文档根目录并忽略其他所有内容。 所以...http://beta.example.com 甚至没有尝试去 /var/www/alpha

这是服务器块文件内容之一的示例

server {
  listen 80;
  listen [::]:80;
  server_name alpha.example.com;
  root /var/www/alpha;
  index index.php index.html index.htm index.nginx-debian.html;

  access_log /var/log/nginx/alpha_access.log;
  error_log /var/log/nginx/alpha_error.log;

  location / {
    try_files $uri $uri/ /index.php;
  }

  location ~ ^/(doc|sql|setup)/ {
    deny all;
  }

  location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
  }

  location ~ /\.ht {
    deny all;
  }
}

所以,换一种说法:我需要在其中添加什么来告诉 nginx“如果子域不是 alpha,请忽略所有这些......这仅适用于 alpha.example.com”?

【问题讨论】:

    标签: nginx-config


    【解决方案1】:

    原来我的问题是其中一个块中的服务器名称拼写错误。当我关注 sobdomain 时,我没有注意到域名本身是错误的(例如 alpha.exampple.com 会这样做)。

    这样做的结果是违反直觉的,可能会让你找出各种错误的树来试图找出问题所在。

    不过,部分答案是,nginx 的设计显然倾向于寻找可以响应请求的服务器块……即使 url 中的子域不匹配任何内容。

    加强这一点的关键可能是编写一个好的默认服务器块。 . .我仍在努力。

    例如,我将 http://example.com 设置为默认值,但在我上面描述的场景中,对于 alpha.example.com 和 beta.example.com 的服务器块,键入 http://x.example.com 不会到达我的默认设置。

    所以有一些工作要做。欢迎咨询。

    (编辑:我很确定 anyrandomcharacters.example.com 的包罗万象的默认服务器不会发生。在 nginx 可以对子域执行任何操作之前,必须有 DNS 将子域路由到您的服务器。也许通配符 DNS 可以达到这个目的。)

    【讨论】:

    • 如果您发现更多信息,请更新!
    • 这是一本关于该主题的非常好的读物。 nginx 似乎只是使用站点中最先出现的任何服务器块(按字母顺序),这并不是完全错误的。在某些情况下它会这样做:computerworld.com/article/2987967/…
    猜你喜欢
    • 1970-01-01
    • 2019-05-16
    • 2017-10-31
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 2015-06-04
    • 2012-07-25
    相关资源
    最近更新 更多