多行配置的 nginx/haproxy 性能
Posted
技术标签:
【中文标题】多行配置的 nginx/haproxy 性能【英文标题】:nginx/haproxy performance with many lines of configuration 【发布时间】:2013-03-03 12:01:14 【问题描述】:我正计划构建一个可以以编程方式设置子服务器并使用 nginx/ha 对它们进行沙箱化的环境。首先,我会确保*.example.com
指向 nginx/ha。然后,例如,我将应用程序x
设置为仅从x.example.com
提供服务,然后允许应用程序x
与应用程序y
的特定方法通信,我将添加以下配置:
server
server_name x.example.com;
location /y/allowed/method/
proxy_pass y.example.com;
(以及相应的 haproxy 配置,如果我要使用 ha)
我的问题是,我可以在给定的 nginx 或 haproxy 实例中包含多少这样的服务器和位置,同时仍保持高性能?我知道我可以将访问限制上移一层到应用程序本身,尽管我更喜欢在网络层
编辑: 答案在下面的 cmets 中。本质上,如果配置可以放入 RAM,性能不会受到影响。
【问题讨论】:
【参考方案1】:您应该生成具有许多服务器块(每个域一个)的 nginx 配置,如下所示:
server
server_name x.example.com;
location /y/allowed/method/
proxy_pass y;
参考:
http://nginx.org/en/docs/http/server_names.html http://nginx.org/en/docs/http/request_processing.html【讨论】:
没错,这比 domain 好......我会更新问题 不过,我的问题仍然存在,nginx 可以处理多少条规则?例如,如果我有 1000 台服务器,每台服务器有 10 个不同的位置进行代理? 这取决于你有多少内存乘以你在nginx中编译了多少模块。 1000 个服务器 x 10 个位置必须没问题。事实上,我看到了配置大几十倍的人。 所以它可以处理 100,000 个位置而不会对性能产生太大影响?我想如果它散列每个服务器+位置会很好吗?我仍然对限制是什么感到好奇(为了争论,我们会说它是一个带有默认模块的 vanilla nginx 服务器)?虽然我希望有人知道,但我可以做一些测试...... 它对server_name
s 使用哈希表(参见:server_names_hash_bucket_size
),对location
s 使用某种基数树,除非它们由正则表达式指定。唯一的限制是 RAM 的数量。以上是关于多行配置的 nginx/haproxy 性能的主要内容,如果未能解决你的问题,请参考以下文章
两种web最简单的负载均衡配置(nginx haproxy)