0

我希望任何少于六个字符的子域返回 404 -

例如,abcd.example.com应该返回一个 404,但stackoverflow.example.com返回 index.html

我试过以下 -

location ~ ^/[a-z0-9-_]{0,2}$
  return 404;
}

这给了我一个错误-unknown directive "0,2}$"

这可能吗?

提前致谢

4

1 回答 1

1

我可以在您的代码中发现几个语法错误:

  1. Nginx 使用花括号{ }来指定内部指令,因此当您使用{0,2}它时会尝试将其读取为指令 - 您需要双引号以避免这种情况;

  2. 在你之后$,你应该有一个{为你的location声明打开指令。

但是最大的问题是location与子域无关 - 您正在寻找的是server_name在上面的阶段location。在文档中阅读有关服务器名称的更多信息。

注意:这是未经测试的代码;

我会尝试以下方法:

server {
    listen       80;
    # We require the expression in double quotes so the `{` and `}` aren't passed as directives.
    # The `\w` matches an alphanumeric character and the `{7}` matches at least 7 occurrences
    server_name  "~^\w{7}\.example\.com";

    location / {
        # do_stuff...;
    }
}

server {
    listen       80;
    # We require the expression in double quotes so the `{` and `}` aren't passed as directives.
    # The `\w` matches an alphanumeric character and the `{1,6}` matches no more than 6 occurrences
    server_name  "~^\w{1,6}\.example\.com";

    location / {
        return 404;
    }
}

正如我所说,上述内容未经测试,但应该为您提供良好的基础。您可以在文档中阅读有关PCRE正则表达式 nginx users 和server_names的更多信息。

于 2013-06-11T09:28:48.083 回答