深入了解Nginx:负载均衡与反向代理

一、前言

在了解负载均衡与反向代理之前,让我们先了解一下什么是nginx和它的特点。

1.什么是nginx

是一款高性能的开源Web服务器,不仅仅是一个简单的Web服务器,更是一个强大的负载均衡器和反向代理工具。在构建大型、高流量的网络架构时,Nginx的负载均衡和反向代理功能发挥着关键作用。

2.特点

  • 高性能:Nginx以其出色的性能而闻名,能够高效地处理大量并发连接,适用于构建高性能的Web服务器和反向代理。

  • 事件驱动:Nginx采用事件驱动的架构,通过异步非阻塞方式处理请求,提高了系统的吞吐量和响应速度。

  • 轻量级: Nginx的设计目标之一是保持简洁、轻量级,占用系统资源较少,适用于资源有限的环境。

  • 负载均衡:Nginx提供了负载均衡功能,能够分发请求到多台服务器,确保系统的稳定性和性能。

  • 反向代理:作为反向代理服务器,Nginx能够接收客户端请求,并将这些请求转发给后端的服务器,隐藏了后端服务器的信息,提高了系统的安全性。

  • 模块化:Nginx的模块化设计使得用户可以根据需求选择性地启用或禁用功能,提供了灵活性和可定制性。

二、反向代理

1.反向代理的实现

需要有一个负载均衡设备(即反向代理服务器)来分发用户请求,将用户请求分发到后端正真提供服

务的服务器上。服务器返回自己的服务到负载均衡设备。负载均衡设备将服务器的服务返回用户。反

向代理的过程隐藏了真实的服务器,客户不知道真正提供服务的人是谁,客户端请求的服务都被代理

服务器处理。反向代理代理的是响应方,也就是服务端;我们请求www.baidu.com时这

www.baidu.com就是反向代理服务器,真实提供服务的服务器有很多台,反向代理服务器会把我们的

请求分转发到真实提供服务的各台服务器。Nginx就是性能非常好的反向代理服务器,用来做负载均

衡。

2.反向代理的配置

实现反向代理模块为ngx_http_proxy_module
我们需要准备两台nginx服务器,一台作为应用服务器,就是网站真正的服务器,另一台作为代理服务器,在代理过程中我们主要对代理服务器进行配置,从而实现代理的目的。

配置代理服务器

#vim /etc/nginx/conf.d/default.conf
server {
    server {
    listen       80;
    server_name  localhost;

    location / {
    proxy_pass http://192.168.91.5;
    proxy_redirect default;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    }
}
nginx -s reload     #重启nginx服务

反向代理具体配置

proxy_pass :真实后端服务器的地址,可以是ip也可以是域名和url地址
proxy_redirect :如果真实服务器使用的是的真实IP:非默认端口。则改成IP:默认端口。
proxy_set_header:重新定义或者添加发往后端服务器的请求头
proxy_set_header X-Real-IP $remote_addr;#只记录连接服务器的上一个ip地址信息。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #通过这个选项可以记录真正客户端机器的ip地址

proxy_connect_timeout::后端服务器连接的超时时间发起三次握手等候响应超时时间
proxy_send_timeout:后端服务器数据回传时间,就是在规定时间之内后端服务器必须传完所有的数据
proxy_read_timeout :nginx接收upstream(上游/真实) server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭。像长连接

配置完成后,我们就可以通过代理服务器的ip地址或者域名来访问,所有的访问请求由代理服务器转发到真正的网站服务器上,从而隐藏真正的网站服务器。

三、负载均衡

在代理服务器转发请求到真正的网站服务器上,要是网站就一台的话,服务器的压力过大,极其容易宕机,导致网站崩溃。从而我们可以在后端多加几台服务器,通过upstream模块实现负载均衡,由算法来进行调度。

1.负载均衡算法

upstream 支持4种负载均衡调度算法

1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;

2、ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。

3、url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。

4、fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持 fair的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair模块。

2.负载均衡的配置

upstream testapp { 
      server 192.168.91.5:8080;
      server 192.168.91.6:8080;
    }
 server {
        ....
        location / {         
           proxy_pass  http://testapp;  #请求转向 testapp 定义的服务器列表         
        }

四、结语

在本文中,我们深入探讨了 Nginx 负载均衡和反向代理的关键概念、优势以及如何配置和使用它们来提高 Web 服务的性能和可用性。Nginx 的灵活性和高度可定制性使其成为处理高流量和复杂网络架构的理想选择。

负载均衡通过分发流量到多个服务器来确保系统的平稳运行,提高整体性能。反向代理则通过隐藏后端服务器的真实地址,提高了系统的安全性。这两者的结合为构建可靠且高效的网络基础设施提供了强大的工具。

然而,Nginx 的功能远不止于此。通过深入学习 Nginx 的文档和配置选项,你可以发现更多高级特性,满足各种复杂的需求。无论是面对高流量的在线服务还是构建安全可靠的应用程序,Nginx 始终是一个强大而可靠的伙伴。

希望这篇博客能够帮助你更好地理解和使用 Nginx 负载均衡与反向代理,为你的网络架构和应用程序性能提供支持。

感谢阅读,如果有任何问题或建议,请随时留言。愿你的网络服务始终高效、安全且可靠!

猜你喜欢

转载自blog.csdn.net/XX_HK/article/details/134830093