Nginx 反向代理设置

Nginx 反向代理设置

目前,我有数百个 Web 应用程序分布在大约 20 台服务器上,并且在这些运行的 Pound 和 Haproxy 前面有一个反向代理。 Pound 正在执行 http 到 https 重定向和 SSL 加密,然后转发到 Haproxy,Haproxy 为每个站点设置了一条规则,以转发到运行 Tomcat 的后端服务器之一。所有站点都位于同一域,例如 www.domain.com/webapp1、www.domain.com/webapp2

Pound 和 Haproxy 最初是由我们的托管提供商设置的,由于对 Pound 感到沮丧,我现在正在考虑用 Nginx 替换此设置。我已经让 Nginx 在开发环境中运行,执行 https 重定向和 SSL,并且设置了一些规则来代理到后端。

我真的只是在寻求一些建议,看看这是否是解决此问题的最佳方法,或者我是否最好让 Haproxy 处理所有规则并仅将 Nginx 配置为 Pound 的替代品。

我担心的是,我将使用数百个转发规则(如下所示)配置 Nginx,最终会出现性能问题。欢迎任何建议,谢谢。

location /webapp1/ {
     proxy_pass http://10.1.9.11:8080;
}

location /webapp2/ {
     proxy_pass http://10.1.9.11:8080;
}

location /webapp3/ {
     proxy_pass http://10.1.9.12:8080;
}

答案1

我对此了解不多,haproxy但我知道足以nginx解决您对性能问题的担忧。

请注意,nginx配置被编译为struct友好的格式并保存在内存中,不会在每次请求时读取该文件。因此,数百个location /...配置的运行速度几乎与调用相同的次数一样strlen()strncmp()。与套接字设置相比,这是可以忽略不计的。

网址是在匹配开始之前标准化=因此,除非您使用运算符之一 ( , ~, *~, ^~),否则匹配并没有什么真正聪明的地方。

您可以使用正则表达式匹配(~*~),然后使用一些if逻辑来在服务器之间做出决定upstream,但是这将是一个缓慢的解决方案

另一方面,如果您确实有至少一个正则表达式位置,那么您应该考虑使用^~运算符。请参阅马丁·雷蒙德 (Martin Redmond) 对 SO 的旧但仍然相关的答案关于不同的运算符以及如何nginx匹配它们。

相关内容