【Nginx】Nginx代理模式相关概念解释及Nginx安装

Nginx代理模式

Nginx 是一个高性能的HTTP和反向代理服务器,同时也支持IMAP/POP3代理服务。它可以在多种场景下使用,其中就包括正向代理和反向代理模式。

相关概念

反向代理 (Reverse Proxy)

在反向代理模式中,Nginx 通常位于网络的内部,作为客户端请求到达的第一个接触点。客户端(如Web浏览器)并不直接连接到后端服务器,而是将请求发送到 Nginx。Nginx 然后根据配置规则,将这些请求转发给内部网络中的适当服务器,并将响应返回给客户端。这种设置可以隐藏后端服务器的真实IP地址,提供额外的安全层,并且可以实现负载均衡、缓存等功能。

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

  • 负载均衡:分发流量到多个后端服务器。
  • 安全:隐藏真实服务器,保护免受直接攻击。
  • 缓存:减少对后端服务器的请求,加速页面加载。
  • SSL 终止:处理加密和解密,减轻后端服务器负担。

正向代理 (Forward Proxy)

正向代理则是在客户端与外部网络之间的中介。当内部网络中的客户端需要访问外部资源时,它们会通过正向代理服务器发出请求。正向代理服务器可以检查并控制哪些请求被允许或拒绝。此外,它还可以用于缓存外部资源,以提高性能和节省带宽。

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

  • 控制访问:限制内部用户对外部网络的访问。
  • 匿名性:隐藏客户端的真实IP地址。
  • 缓存:存储频繁访问的内容副本,减少重复下载。
  • 绕过过滤:在某些情况下,帮助用户访问被封锁的网站。

负载均衡(Load Balancing)

负载均衡是一种计算机网络技术,用于将工作负载分布到多个计算资源(如计算机、服务器、网络链路或其它资源)上。其目的是优化资源使用,最大化吞吐量,最小化响应时间,并确保没有单一资源过载。通过有效地分配任务,负载均衡可以提高系统的可靠性和可用性。负载均衡的工作原理:

负载均衡器位于客户端和服务器之间,作为流量的入口点。当一个请求到达时,负载均衡器根据预定义的算法选择一台后端服务器来处理这个请求。它会持续监控所有连接的服务器的状态,确保流量只被引导至健康的服务器。

常见的负载均衡算法

  1. 轮询 (Round Robin): 每个请求按顺序轮流分配给不同的服务器。
  2. 加权轮询 (Weighted Round Robin): 类似于轮询,但是每个服务器有一个权重值,权重越高的服务器获得更多的请求。
  3. 最少连接 (Least Connections): 将新请求发送给当前活动连接数最少的服务器。
  4. IP哈希 (IP Hash): 根据客户端的IP地址计算出一个哈希值,并始终将该客户端的请求发送到同一台服务器。
  5. URL哈希 (URL Hash): 类似于IP哈希,但基于URL的一部分来决定目标服务器。
  6. 响应时间 (Response Time): 选择响应时间最短的服务器。
  7. 随机选择 (Random Selection): 随机选择一台服务器。

安装与配置

下载 nginx 包后解压到 D 盘 nginx 文件夹下,双击应用程序 nginx.exe 运行(在任务管理器中可结束进程)

D:\nginx\conf 目录下 nginx.conf 文件配置

conf 复制代码
server {
	listen       80;
	server_name  127.0.0.1;
    location / {
		proxy_pass   http://testnginx;
		root   html;
		index  index.html index.htm;
    }
}

ip_hash 在 upstream 配置中的定义

conf 复制代码
upstream servertest {
	server 192.168.1.146:8080 down;
	server 192.168.1.146:8081 weight=3;
	server 192.168.1.146:8082;
	server 192.168.1.146:8083 backup;
	ip_hash;
}
  • down:表示当前 server 暂时不参与负载
  • Weight:默认为1,weight 越大,负载的权重就越大。
  • max_fails:允许请求失败的次数默认为1。当超过最大次数时,返回 proxy_next_upstream 模块定义的错误
  • fail_timeout:max_fails 次失败后,暂停的时间。
  • Backup:其它所有的非 backup 机器 down 或者忙的时候,请求 backup 机器。(压力最轻)
相关推荐
计算机-秋大田18 分钟前
基于微信小程序的私家车位共享系统设计与实现(LW+源码+讲解)
java·vue.js·spring boot·后端·微信小程序·小程序·课程设计
喜欢猪猪1 小时前
基于 Java 开发的 MongoDB 企业级应用全解析
java·开发语言·mongodb
web2u2 小时前
如何安全地管理Spring Boot项目中的敏感配置信息
java·spring boot·后端·安全·spring·gitee·github
赛博末影猫2 小时前
Spring理论知识(Ⅴ)——Spring Web模块
java·前端·spring
zimoyin2 小时前
使用 Kotlin 将 Vertx 和 Springboot 整合
java·spring boot·kotlin
苹果酱05672 小时前
Redis基础篇(万丈高楼平地起):核心底层数据结构
java·vue.js·spring boot·mysql·课程设计
一丝晨光3 小时前
为什么会有函数调用参数带标签的写法?Swift函数调用的参数传递需要加前缀是否是冗余?函数调用?函数参数?
java·开发语言·c++·ios·c#·objective-c·swift
fat house cat_4 小时前
【思维导图】redis
java·redis·思维导图
爱上语文5 小时前
登录认证(5):过滤器:Filter
java·后端·spring