如何配置负载均衡
负载平衡是配置反向代理服务器的主要原因之一。
我们可以先在前面创建的配置文件中添加几行另外的内容实现负载均衡。
请看一个例子:
upstream backend_servers { server host1.example.com; server host2.example.com; server host3.example.com; } server { listen 80; server_name example.com; location/{ proxy_pass http://backend_servers; } }
在此示例中,我们添加了一个名为“backend_servers”的上下文。
在那里,每个服务器的主机名/IP都在单独的行中指定。
在proxy_pass
指令中,通常是输入主机名或者IP地址,而在负载均衡中是指定了上面定义的upstream的名称:backend_servers
。
此配置将把传入的对“example.com”的请求转发到upstream指定的三个不同主机。
默认情况下,Nginx将循环转发这些请求,即每个主机轮流处理一个请求。
非HTTP服务器
上面的示例显示了如何将请求传递到HTTP服务器,但Nginx也可以充当FastCGI、uwsgi、SCGI和memcached的反向代理。
不要使用上面显示的“proxy_pass”指令,而是将其替换为适当的类型:
- proxy_pass(HTTP服务器–如上所示)
- fastcgi_pass(fastcgi服务器)
- uwsgi_pass(uwsgi服务器)
- scgi_pass(scgi服务器)
- memcached_pass(memcached服务器)
如何传递标头
要配置反向代理服务器传递给其他服务器的标头,我们可以在之前创建的配置文件中定义它们。
使用proxy_set_header
指令调整标头。
它们可以在server, location, 或者 http 块 中定义:
例如:
location /some/path/{ proxy_set_header HOST $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://example.com; }
上面的示例定义了三种类型的报头,并将它们设置为相应的变量。
“host”标头包含有关正在请求的主机的信息。
“X-Forwarded-Proto”标头标明请求是HTTP还是HTTPS。X-Real-IP
标头包含了请求客户端的IP地址。
如何测试nginx配置
在编辑.conf
文件之后,我们应该测试配置是否存在错误,然后重新启动nginx。
# service nginx configtest # service nginx restart
搭建nginx反向代理的步骤
安装nginx
在Ubuntu和Debian发行版上:
$sudo apt-get install nginx
在CentOS和Red Hat 上:
# yum install nginx
禁用默认虚拟主机
# unlink /etc/nginx/sites-enabled/default
创建反向代理配置文件
此文件需要放在网站上的可用目录中:
# cd /etc/nginx/sites-available
创建配置文件:
# vi reverse-proxy.conf
内容参考如下:
server { listen 80; location /some/path/{ proxy_pass http://example.com; } }
将'example.com'替换为要转发到的服务器的IP地址或者主机名。
您还可以指定端口,例如'127.0.0.1:8080'。保存更改,然后退出文本编辑器。
请注意,这将适用于HTTP服务器,但Nginx还支持其他协议。
启用代理,通过创建指向“sites-enabled”目录的符号链接来启用新配置:
# ln -s /etc/nginx/sites-available/reverse-proxy.conf /etc/nginx/sites-enabled/reverse-proxy.conf
为什么nginx?
nginx的可扩展性及其经过验证的处理极高容量连接的能力意味着它是可以作为反向代理和负载平衡器的部署。
一个公共应用程序是在客户端和Web服务器之间放置nginx,它可以作为SSL加密和Web加速器的端点运行。
通常通过NGINX反向代理更有效地完成通常会增加Web服务器上负载的操作,例如加密,压缩和缓存。
反向代理如何工作?
可以配置在客户端和Web服务器(或者服务器)之间的系统作为反向代理。
代理服务充当前端,通过处理所有传入的客户端请求并将其分发给后端Web,数据库和/或者其他服务器。
配置负载平衡算法
nginx负载均衡默认算法是:round robin
其他算法有:
- least_conn - 基于当前的活动连接数分发到后端服务器的传入连接。如果在该时刻在该时刻具有最少的连接,则仅接收请求。这在需要与客户端长期连接的应用程序特别有用。
- ip_hash - 根据客户端的IP地址分发传入连接。如果我们需要创建会话一致性,这是有用的。
- hash - 基于哈希键分发传入连接。这对memcached主机尤其有用。
可以在upstream中指定负载均衡方法,如下所示:
upstream backend_servers { least_conn; server host1.example.com; server host2.example.com; server host3.example.com; }
反向代理的好处
配置nginx反向代理意味着所有传入请求都在单点处理,有几个优点:
- 负载平衡 - 反向代理将传入连接分配到后端服务器,甚至可以根据每个服务器的当前负载执行此操作。这可确保任何后端服务器都没有使用请求过载。它还可以防止停机时间,因为反向代理可以重新路由流量,如果后端服务器发生脱机。
- 中央日志记录 - 而不是具有多个服务器生成日志文件,反向代理可以在单个位置记录所有相关信息。这使得管理员的工作非常容易,因为问题可以更快地分离出来,并且在排除问题时,无需在多个位置解析日志文件。
- 改进的安全性 - 反向代理将混淆有关后端服务器的信息,以及作为对传入攻击的第一行防御。由于反向代理在将流量过滤到后端之前,因此只传递到其他服务器只有无害的流量。
- 更好的性能 - 反向代理服务器可以对如何在后端服务器分发负载的智能决策,这导致更快的响应时间。其他常见的服务器任务(如缓存和压缩)也可以卸载到反向代理服务器,释放后端服务器的资源。