在 nginx 中使用正则表达式限制子域名

在 nginx 中使用正则表达式限制子域名

我想知道如何有效地限制(而不是限制速率)子域。这是我的示例,其中无效子域的重定向由带有正则表达式匹配的 if 语句处理。

server {
  listen 80;
  server_name www.domain.com *.domain.com;
  set $host_red 0;
  if ($host !~ (sub1|sub2\.*\.nm|newsub[0-9]*\.nm)\.domain.com) {
    set $host 1;
  }
  if ($host) {
    rewrite ^ $scheme://www.domain.com$request_uri;
  }
  ...
}

一种方法是使用此正则表达式创建另一个服务器块并*.domain.com从当前服务器块中删除。但这意味着在这两个服务器块之间重复大量通用配置。还有其他方法吗?

答案1

如果您只想在域之间重定向,我看不出您会在哪里复制内容。如果可以的话,避免使用 if 也是一个好主意,因为它会带来性能损失。

但最重要的事情是:对多个域名回答相同的问题是一个非常糟糕的主意,因为搜索引擎会因内容重复而惩罚你。以下配置应该是你要找的:

server {
    listen 80 default_server;
    server_name _;
    return 301 http://www.domain.com$request_uri;
}

server {
    listen 80;
    server_name www.domain.com;
    ...
}

它将响应请求www.domain.com并使用适合 SEO 的重定向代码将所有其他域名重定向到该域名。

相关内容