Nginx - 深入了解 正向代理vs反向代理 、负载均衡算法 、 缓存策略

news/2024/11/13 9:39:02/

文章目录

  • Nginx基本功能与代理定义
  • Nginx反向代理
    • 工作原理
    • 应用场景
    • 示例配置
  • Nginx正向代理
    • 工作原理
    • 应用场景
    • 示例配置
  • 反向代理与正向代理的区别
  • Nginx负载均衡算法
  • Nginx缓存策略
  • Nginx高级安全设置
  • 动态内容缓存策略

在这里插入图片描述


Nginx基本功能与代理定义

Nginx是一款高性能的HTTP服务器和反向代理服务器。代理服务器(Proxy Server)在客户端和目标服务器之间充当中介,其主要作用包括负载均衡缓存、内容过滤和安全增强等。

  • 反向代理:代理服务器代表目标服务器接受客户端请求,并将请求转发给目标服务器,再将响应返回给客户端。
  • 正向代理:代理服务器代表客户端发送请求,获取目标服务器的响应并返回给客户端。

Nginx反向代理

工作原理

在反向代理模式中,Nginx接收客户端的HTTP请求,将这些请求转发给内部服务器集群处理,然后将服务器的响应发送回客户端。反向代理通常用于隐藏服务器集群的实际地址、实现负载均衡、提高性能和增强安全性。

应用场景

  1. 负载均衡:将请求分配给多个后端服务器,提高服务可用性和响应速度。
  2. 缓存缓存静态内容,减少后端服务器的负载。
  3. 安全性:隐藏后端服务器的真实IP,防止直接攻击。

示例配置

http {upstream backend {server backend1.example.com;server backend2.example.com;}server {listen 80;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}

Nginx正向代理

工作原理

在正向代理模式中,客户端将请求发送给代理服务器,代理服务器再代表客户端向目标服务器发出请求,并将目标服务器的响应返回给客户端。正向代理通常用于访问控制、网络加速和隐私保护。

应用场景

  1. 访问控制:限制用户访问特定网站或服务。
  2. 内容过滤:过滤掉不合规或恶意内容。
  3. 隐私保护:隐藏客户端的真实IP,提高匿名性。

示例配置

events {worker_connections 1024;
}http {server {listen 8888;location / {proxy_pass http://$http_host$request_uri;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;}}
}

反向代理与正向代理的区别

  1. 代理对象:反向代理代理的是服务器,正向代理代理的是客户端。
  2. 应用目的
    • 反向代理:主要用于负载均衡缓存、提升安全性。
    • 正向代理:主要用于访问控制、内容过滤和隐私保护。
  3. 配置差异:反向代理需要配置后端服务器池(upstream),正向代理直接将请求转发至目标服务器。

Nginx负载均衡算法

Nginx提供多种负载均衡算法来分配请求到后端服务器,常用的算法包括:

  1. 轮询(Round Robin):默认算法,将请求依次分配给每个后端服务器。

    upstream backend {server backend1.example.com;server backend2.example.com;
    }
    
  2. 最少连接数(Least Connections):将请求分配给当前活动连接数最少的服务器。

    upstream backend {least_conn;server backend1.example.com;server backend2.example.com;
    }
    
  3. IP哈希(IP Hash):根据客户端IP地址的哈希值将请求分配给特定服务器,适用于会话保持。

    upstream backend {ip_hash;server backend1.example.com;server backend2.example.com;
    }
    
  4. 权重(Weight):根据服务器的权重分配请求,权重越高,分配的请求越多。

    upstream backend {server backend1.example.com weight=3;server backend2.example.com weight=1;
    }
    

Nginx缓存策略

缓存可以显著提高性能和减少后端服务器的负载。Nginx的缓存策略包括静态内容缓存和代理缓存

静态内容缓存

Nginx可以直接缓存静态内容,如图片、CSS文件等。

location /static/ {root /var/www/html;expires 30d;add_header Cache-Control "public";
}

代理缓存

代理缓存可以缓存从后端服务器获取的动态内容。

http {proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;server {location / {proxy_cache my_cache;proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;add_header X-Cache-Status $upstream_cache_status;}}
}

缓存优化策略

  1. 设置合适的缓存时间:根据内容的变化频率设置合理的缓存过期时间。
  2. 缓存:配置缓存键,以确保唯一性和有效性。
  3. 缓存清理:定期清理过期缓存,避免占用过多存储空间。

Nginx高级安全设置

提高Nginx的安全性可以保护服务器免受各种网络攻击。以下是一些常用的安全设置:

  1. 限制请求速率:防止DDoS攻击和暴力破解。

    http {limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;server {location / {limit_req zone=mylimit burst=20 nodelay;}}
    }
    
  2. SSL/TLS配置:启用HTTPS,提高传输安全性。

    server {listen 443 ssl;server_name example.com;ssl_certificate /etc/nginx/ssl/nginx.crt;ssl_certificate_key /etc/nginx/ssl/nginx.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";location / {proxy_pass http://backend;}
    }
    
  3. 防止主机头攻击:只允许特定的主机头。

    server {server_name example.com;if ($host !~* ^(example\.com)$ ) {return 444;}location / {proxy_pass http://backend;}
    }
    
  4. HTTP安全头:添加HTTP安全头以防止各种Web攻击。

    server {add_header X-Content-Type-Options nosniff;add_header X-XSS-Protection "1; mode=block";add_header X-Frame-Options SAMEORIGIN;add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;location / {proxy_pass http://backend;}
    }
    

动态内容缓存策略

Nginx的动态内容缓存可以显著提升网站性能和响应速度。动态内容缓存指的是缓存动态生成的网页内容,以减少对后端服务器的请求次数。

动态内容缓存配置

首先,需要配置缓存路径和缓存区域:

http {proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;server {location / {proxy_cache my_cache;proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;add_header X-Cache-Status $upstream_cache_status;}}
}

动态内容缓存优化

  1. 缓存键优化:确保缓存键的唯一性,避免缓存混乱。

    proxy_cache_key "$scheme$request_method$host$request_uri";
    
  2. 缓存清理策略:定期清理过期和不再需要的缓存,保持缓存空间的有效利用。

    find /data/nginx/cache -type f -mtime +7 -delete
    
  3. 避免缓存特定内容:对于用户特定数据(如购物车信息)不进行缓存

    location /cart {proxy_no_cache 1;proxy_pass http://backend;
    }
    
  4. 细化缓存控制:针对不同的内容设置不同的缓存时间。

    location /api {proxy_cache_valid 200 1m;proxy_pass http://backend;
    }location /static {proxy_cache_valid 200 30m;proxy_pass http://backend;
    }
    

在这里插入图片描述


http://www.ppmy.cn/news/1462697.html

相关文章

PHP开发安全:专家级代码审计策略与方法

PHP开发安全:专家级代码审计策略与方法 在当今的软件开发领域,PHP作为一种广泛使用的服务器端脚本语言,其安全性对于保护Web应用至关重要。代码审计是确保PHP应用程序安全的关键步骤。本文将探讨专家级的PHP代码审计策略与方法,帮…

C++ | Leetcode C++题解之第109题有序链表转换二叉搜索树

题目: 题解: class Solution { public:int getLength(ListNode* head) {int ret 0;for (; head ! nullptr; ret, head head->next);return ret;}TreeNode* buildTree(ListNode*& head, int left, int right) {if (left > right) {return nu…

antd-vue a-tree 当两个不同一级下二级key相同的时候就会导致两个同时选择, 拿到node.parent的数据也会出问题, 解决办法

一、问题如下图: 当两个不同一级下二级key相同的时候就会导致两个同时选择, 同时拿到node.parent的数据也会出问题, 出现一下问题的原因是因为数据treeData 的key出现相同的了 然后如下图、因为我的查询条件 第二层是给 cloud , 第二层是给 relatedPool…

操作系统总结3

目录 2.3.3 进程互斥的硬件的实现方法 (1)知识总览 (2)中断的屏蔽方法 (3)TestAndSet指令 (4)Swap指令 总结 2.3.4 信号量机制 (1)知识总览 &#x…

Golang并发编程-协程goroutine初体验

文章目录 前言一、Goroutine适合的使用场景二、Goroutine的使用1. 协程初体验 三、WaitGroupWaitGroup 案例一WaitGroup 案例二 总结 前言 学习Golang一段时间了,一直没有使用过goroutine来提高程序执行效率,在一些特殊场景下,还是有必须开启…

OSPF多区域组网实验(思科)

华为设备参考:OSPF多区域组网实验(华为) 技术简介 OSPF多区域功能通过划分网络为多个逻辑区域来提高网络的可扩展性和管理性能。每个区域内部运行独立的SPF计算,而区域之间通过区域边界路由器进行路由信息交换。这种划分策略适用…

保安维稳,四信以科技构筑高速公路安全智慧防线

近日,广东梅大高速发生严重塌方事故,造成了严重的人员伤亡和财产损失。这一事件在公众心中敲响了安全的警钟,再次引起了公众对于交通设施运营安全性的重点关注。 国务院安委会办公室和国家防灾减灾救灾委员会办公室等主管机构先后印发紧急通知…

AWS安全性身份和合规性之Shield

shield:盾(牌);(保护机器和操作者的)护罩,防护屏,挡板;屏障;保护物;(警察的)盾形徽章;保护人;掩护物;盾形纹徽;盾形奖牌; AWS Shield是一项AWS托管的DDoS(Distributed Denial of Service,分布式…