我试图找出是否只包含简单服务器块的Nginxconfiguration是可行的。 每个块提供一个子域名,并将子域名引导到另一个URL。 当然,具体情况下的最大值取决于参数,所以我对确定实际极限的因素更感兴趣。
例如,额外的服务器块的额外成本(内存开销)总是不变的? 调度到特定的服务器块来处理请求一个常量的成本,还是configuration中的服务器块的数量的函数?
一个示例服务器块将是:
server { server_name subdomain.example.com; return 301 http://some.other.example.org/subdomain; }
例如,每个内核的每GB内存或其他相关参数有多less个?
谢谢。
影响多lessserver_name的最大因素是你的CPU的caching大小(当然还有速度)。
首先,nginx将您定义的所有server_name存储到nginx listen的每个IP /端口对的三个哈希表 (取决于您是否在名称中使用通配符)。 这些结构的大小被优化为CPU的高速caching行大小的倍数,nginx打算能够完全匹配来自CPU高速caching的传入请求的server_name ,而不必(相对)慢得多的RAM 。
nginx开箱即用,为每个服务器名称设置了512个 32字节的哈希表。 这可以达到16 KiB,并且很容易适合CPU的L1caching,或者至less在L2caching中。 即使你需要扩展它,大部分时间它仍然应该足够小以适应caching。
这个策略表明你应该努力把名单列表保持在最低限度。
例如,即使匹配通配符条目(如.example.com速度可能“较慢”,平均速度也可能比尝试与明确定义的example.com的几百个子域名匹配要快。
另请参阅有关优化server_name的 nginx文档。