Nginx配置文件的使用以及实现负载均衡的4种常用方式

 更新时间:2025年04月22日 10:21:20   作者:Mxin5  
这篇文章主要介绍了Nginx配置文件的使用以及实现负载均衡的4种常用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前提:

首先先了解一下正向代理和反向代理的理论知识,再直接解读nginx配置文件和实现负载均衡的4种方式。

Nginx是一个强大的开源Web服务器和反向代理服务器,它支持正向代理和反向代理功能。下面是对两者的简要解释:

正向代理

正向代理是在客户端和目标服务器之间充当中间人的代理服务器。当客户端请求访问目标服务器时,请求先发送到正向代理服务器,然后由代理服务器转发请求给目标服务器,并将目标服务器的响应返回给客户端。正向代理隐藏了客户端的真实IP地址,使得目标服务器无法直接识别和追踪客户端。

简而言之:正向代理是客户端访问代理服务器去访问目标服务器,并且对目标服务器隐藏了客户端的真实信息(IP等信息)。

正向代理的主要用途包括:

  • 访问被限制的资源:当某些资源受到网络限制或访问限制时,可以使用正向代理绕过这些限制来获取资源。
  • 提高访问速度:代理服务器可以缓存经常请求的资源,从而提高客户端访问资源的速度。
  • 突破防火墙:正向代理可以帮助绕过企业或国家防火墙的限制,访问被封锁的网站或资源。

反向代理

反向代理是在服务器端和客户端之间充当中间人的代理服务器。当客户端发送请求访问反向代理服务器时,代理服务器会根据一定的规则将请求转发给后端的多个服务器中的一台,然后将后端服务器的响应返回给客户端。反向代理隐藏了真实的服务端,对于客户端而言,它们并不知道具体访问的是哪一台后端服务器。

简而言之:反向代理是指代理服务器接收客户端的请求,然后反向代理将客户端的请求分发给一个或多个目标服务器,最后将响应返回给客户端,对于客户端隐藏了真实的服务端信息。

反向代理的主要用途包括:

  • 负载均衡:反向代理可以根据一定的算法将请求均匀地分发给后端的多台服务器,从而实现负载均衡,提高系统的并发处理能力和稳定性。
  • 缓存静态资源:反向代理可以缓存经常请求的静态资源,减少后端服务器的负载,提高网站的访问速度。
  • 安全性和可靠性:反向代理可以作为防火墙和安全设备,提供安全认证、访问控制、DDoS攻击防护等功能。

总结:

  • 正向代理和反向代理都是利用代理服务器作为中间人来转发请求和响应。
  • 正向代理是客户端通过代理服务器发送请求,代理服务器帮助客户端发送请求到互联网上的目标服务器隐藏客户端的真实IP地址(目标服务器并不知道是那个真实的客户端访问的)。
  • 反向代理是客户端通过代理服务器发送请求,代理服务器将请求转发到后端的多个服务器中的一个反向代理隐藏真实的服务端(客户端并不知道那个后端服务器响应的结果)
  • 两者的区别在于请求的流向和代理服务器与目标服务器的关系,正向代理中代理服务器与客户端处于同一侧(客户端通过代理服务器获取特定的资源),反向代理中代理服务器与目标服务器处于同一侧(服务端通过代理服务器处理客户端的请求)。

Nginx配置文件

nginx 的组成部分

配置文件中有很多#, 开头的表示注释内容,我们去掉所有以 # 开头的段落,精简之后的 内容如下:

#user  nobody;   是用来指定 Nginx 进程运行的用户和用户组的配置项。 在 Linux 系统中,各个进程需要以某个用户的身份来运行,以限制权限并提高安全性
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

nginx 配置文件有三部分组成

第一部分:全局块

比如上面第一行配置的:

  worker_processes  1;

这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。

第二部分:events块

比如上面的配置:

events {
    worker_connections  1024;
}

events 块涉及的指令 主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大网络连接数等。

上述例子就表示每个 work process 支持的最大连接数为 1024.

这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

第三部分:http块

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

需要注意的是:http 块也可以包括 http全局块、server 块。

http全局块

http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

server 块

这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。

每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。

而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

Nginx常用的实现负载均衡的4种方式

Nginx提供了多种方式实现负载均衡,以下是其中几种常用的方式:

轮询(Round Robin)

这是默认的负载均衡算法,Nginx按照请求的顺序依次将请求分配给后端的服务器。每个服务器按照其权重来处理请求,然后按顺序循环分配。

这种算法简单且平均地将负载分配给后端服务器,适用于后端服务器配置相同、处理能力相当的场景。

http {
    upstream backend {
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
        server 192.168.1.103:8080;
    }

    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

IP哈希(IP Hash)

Nginx根据客户端的IP地址进行哈希运算,并根据计算结果将请求分配给固定的后端服务器。

这种算法保证了相同的客户端IP每次请求都会被分配到相同的服务器,适用于需要保持会话状态的应用。

http {
    upstream backend {
        ip_hash;
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
        server 192.168.1.103:8080;
    }

    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

加权轮询(Weighted Round Robin)

Nginx根据每个后端服务器的配置权重将请求分配给服务器。权重越高的服务器,处理的请求就越多。这种方式适用于后端服务器之间配置不同、处理能力不同的情况下。

http {
    upstream backend {
        server 192.168.1.101:8080 weight=3;
        server 192.168.1.102:8080 weight=2;
        server 192.168.1.103:8080 weight=1;
    }

    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

最少连接(Least Connections)

Nginx会统计每个后端服务器当前的活动连接数,并将请求分配给活动连接数最少的服务器,以实现负载均衡。这种算法适用于后端服务器配置和处理能力不同、连接持续时间不均衡的场景。

http {
    upstream backend {
        least_conn;
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
        server 192.168.1.103:8080;
    }

    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

什么是跨域?

跨域(跨域资源共享(Cross-Origin Resources Sharing ,CORS))是指跨域名:域名,记忆网络电脑ip很难记,就给它取了一个名字来记忆,这个名字就要域名。域名最终要被转换为ip地址。跨域是指跨域名的访问,从一个域名的系统去访问另一个域名系统www.baidu.com-www.jd.com,以下情况都属于跨域:

当一个请求url的协议域名、端口号三者之间任意一个与当前页面url不同即为跨域。

负载均衡

什么是负载均衡【降低后端某个服务器的压力 】

在高并发的情况下,一台服务器的负载承受不住,我们就需要使用服务器集群解决高并发,但是又会出现另一个问题,就是客户端的请求如何分配给多个服务器,所以在服务器集群中,需要一个服务器充当一个【负载均衡器-Nginx】【NameServer-也可以是一个集群】的作用,用户的所有请求都会都会由负载均衡器【NameServer】进行接收,调度者根据每台服务器的负载情况通过负载均衡算法将请求分配给某一台后端服务器进行处理。

负载均衡算法比如轮询、权重、随机、区域等等

  • RoundRobbonRule:简单轮询,ribbon默认规则
  • AvailabilityFilteringRule忽略短路状态和并发过高的服务器
  • WeightedResponseTimeRule:根据服务器响应时间作为权重,响应时间越长权重越小
  • ZoneAvoidanceRule:根据区域选择可用的服务器
  • BestAvailableRule忽略短路的服务器,选择并发较低的服务器
  • RandomRule随机选择一个可用服务器
  • Retry重试机制的选择逻辑【不建议

动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速 度。降低原来单个服务器的压力。各司其职

Nginx常用命令

a. 使用nginx操作命令前提

使用nginx操作命令前提:必须进入到nginx的自动生成目录的下/sbin文件夹下

就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

查看 nginx 的版本号

./nginx -v

启动 nginx

./nginx

关闭nginx

./nginx -s stop

重新加载 nginx

在目录:/usr/local/nginx/sbin 下执行命令,不需要重启服务器,自动编译。

./nginx -s reload

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • nginx获取客户端真实ip的常用方法

    nginx获取客户端真实ip的常用方法

    这篇文章给大家介绍了在nginx中获取客户端真实IP的两种常用方法,文中有详细的代码供大家参考,具有一定的参考价值,需要的朋友可以参考下
    2023-09-09
  • Nginx中泛域名配置的实例教程

    Nginx中泛域名配置的实例教程

    泛域名就是我们平常指的二级和三级域名等,这里我们来总结一下Nginx中泛域名解析配置的实例教程,包括正则匹配等细节的讲解,需要的朋友可以参考下
    2016-05-05
  • 分享Nginx下10个安全问题提示

    分享Nginx下10个安全问题提示

    Nginx是当今最流行的Web服务器之一。它为世界上7%的web流量提供服务而且正在以惊人的速度增长。它是个让人惊奇的服务器,我愿意部署它
    2014-04-04
  • Nginx中多种负载均衡策略配置的实战指南

    Nginx中多种负载均衡策略配置的实战指南

    在当今高并发、大流量的互联网应用中,单台服务器往往难以承受巨大的访问压力,负载均衡作为解决这一问题的关键技术,能够将请求分发到多台服务器上,本文将深入探讨Nginx负载均衡的各种策略和配置方法,大家可以根据需要进行选择
    2025-10-10
  • Nginx基础学习之realip模块的使用方法

    Nginx基础学习之realip模块的使用方法

    这篇文章主要给大家介绍了关于Nginx基础学习之realip模块使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Nginx具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-06-06
  • nginx配置https://localhost/index报404

    nginx配置https://localhost/index报404

    本文主要介绍了Nginx配置导致页面刷新时报404错误的问题,主要因为静态文件路径配置错误、前端路由问题和反向代理配置错误这几种错误,下面就来介绍一下解决方法
    2024-12-12
  • Nginx配置-日志格式配置方式

    Nginx配置-日志格式配置方式

    这篇文章主要介绍了Nginx配置-日志格式配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 配置nginx转发内网请求到外网的实现示例

    配置nginx转发内网请求到外网的实现示例

    本文主要介绍了配置nginx转发内网请求到外网的实现示例,通过nginx配置代理实现内网对外网接口数据的获取,涉及nginx安装、配置SSL、日志设置和错误排查,感兴趣的可以了解一下
    2024-10-10
  • 深入理解nginx如何实现高性能和可扩展性

    深入理解nginx如何实现高性能和可扩展性

    这篇文章主要介绍了深入理解nginx如何实现高性能和可扩展性,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • nginx经过多层代理后获取真实来源ip过程详解

    nginx经过多层代理后获取真实来源ip过程详解

    这篇文章主要介绍了nginx经过多层代理后获取真实来源ip过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09

最新评论