我想知道如何有效地限制(而不是限制速率)子域。这是我的示例,其中无效子域的重定向由带有正则表达式匹配的 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 的重定向代码将所有其他域名重定向到该域名。