文章目录
-
-
- *写在前面Nginx有关`proxy`的指令有哪些:
- 一、Nginx反向代理-“proxy_set_header”指令的设置
-
- 0、这个指令的具体作用以及二级选项:
- 1、`proxy_set_header Host`测试
- 2、`proxy_set_header X-Forwarded-For`测试
- 二、Nginx反向代理-proxy其他参数简单介绍
-
- 1、`proxy_connect_timeout`
- 2、`proxy_send_timeout`
- 3、`proxy_read_timeout`
- 4、`proxy_buffering`
- 5、`proxy_buffers`
- 三、负载均衡介绍及Nginx七层负载均衡
-
- 1、什么是负载均衡
- 2、七层网络模型简述
- 3、Nginx四层负载均衡与Nginx七层负载均衡的区别
- 4、Nginx七层负载均衡配置
-
- 1)如何配置
- 2)`proxy_next_upstream`
- 5、Nginx负载均衡调度算法
-
- 1)默认的使用RR(Round Rbin)轮询算法
- 2)加权(height)算法
- 3)ip_hash算法
- 4)url_hash算法
- 5)least_conn算法(最小连接数)
- 6、Nginx负载均衡后端服务器状态修改参数
-
- 1)down
- 2)backup
- 3)max_fails和fail_timeout
- 4)max_conns
- *7、Nginx负载均衡健康检查配置
-
*写在前面Nginx有关proxy
的指令有哪些:
Nginx 提供了多个与代理相关的指令,用于配置和优化反向代理行为。这些指令主要用于
http
和server
配置块中的
location
部分。以下是常用的 Nginx 代理指令及其解释:1.
proxy_pass
- 含义: 指定代理请求的上游服务器的地址。可以是 HTTP、HTTPS、或 TCP 服务器地址。
- 示例:
proxy_pass http://backend_server;
2.
proxy_set_header
- 含义: 设置转发到上游服务器的请求头部。可以用来修改、添加或删除请求头部。
- 示例:
nginx proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
3.
proxy_ignore_headers
- 含义: 指定在上游服务器的响应中忽略哪些响应头部。用于控制 Nginx 是否处理这些头部。
- 示例:
proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
4.
proxy_hide_header
- 含义: 从返回给客户端的响应中隐藏指定的响应头部。
- 示例:
proxy_hide_header X-Powered-By;
5.
proxy_set_header
- 含义: 指定用于与上游服务器进行连接的请求头部。
- 示例:
nginx proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
6.
proxy_read_timeout
- 含义: 设置从上游服务器读取响应的超时时间。超时后,Nginx 会关闭连接。
- 示例:
proxy_read_timeout 90s;
7.
proxy_connect_timeout
- 含义: 设置与上游服务器建立连接的超时时间。
- 示例:
proxy_connect_timeout 30s;
8.
proxy_send_timeout
- 含义: 设置向上游服务器发送请求的超时时间。
- 示例:
proxy_send_timeout 30s;
9.
proxy_buffer_size
- 含义: 设置用于保存上游服务器响应头部的缓冲区大小。
- 示例:
proxy_buffer_size 4k;
10.
proxy_buffers
- 含义: 设置用于保存上游服务器响应的缓冲区数量和每个缓冲区的大小。
- 示例:
proxy_buffers 8 16k;
11.
proxy_busy_buffers_size
- 含义: 设置允许在请求处理中使用的“忙碌”缓冲区的最大大小。这有助于在高负载情况下减少内存使用。
- 示例:
proxy_busy_buffers_size 64k;
12.
proxy_temp_file_write_size
- 含义: 设置在将响应写入临时文件时的最大块大小。
- 示例:
proxy_temp_file_write_size 64k;
13.
proxy_max_temp_file_size
- 含义: 设置用于保存临时文件的最大大小。如果响应超过此大小,将被写入到磁盘。
- 示例:
proxy_max_temp_file_size 1024m;
14.
proxy_cache
- 含义: 启用或禁用缓存功能。指定缓存区域名称。
- 示例:
proxy_cache my_cache_zone;
15.
proxy_cache_path
- 含义: 定义缓存区域的存储路径和缓存参数。
- 示例:
nginx proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache_zone:10m max_size=1g;
16.
proxy_cache_valid
- 含义: 定义缓存的有效时间。可以根据不同的 HTTP 状态码设置不同的有效时间。
- 示例:
nginx proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;
17.
proxy_cache_bypass
- 含义: 指定在某些条件下绕过缓存。可以使用变量来控制。
- 示例:
proxy_cache_bypass $http_cache_control;
18.
proxy_cache_key
- 含义: 定义缓存的键。用于唯一标识缓存条目。
- 示例:
proxy_cache_key "$scheme$request_method$host$request_uri";
19.
proxy_redirect
- 含义: 修改从上游服务器返回的
Location
和Refresh
头部。- 示例:
proxy_redirect http://backend_server/ /;
20.
proxy_pass_request_headers
- 含义: 控制是否将客户端请求中的所有头部转发给上游服务器。
- 示例:
proxy_pass_request_headers on;
21.
proxy_pass_request_body
- 含义: 控制是否将客户端请求体转发给上游服务器。
- 示例:
proxy_pass_request_body on;
总结
这些指令提供了丰富的配置选项,允许你精细地控制 Nginx
作为代理服务器的行为。你可以根据需要选择适当的指令来优化性能、处理请求和响应头部、管理缓存等。
一、Nginx反向代理-“proxy_set_header”指令的设置
0、这个指令的具体作用以及二级选项:
proxy_set_header
指令在 Nginx 作为反向代理服务器时,用于设置或修改传递给后端服务器的 HTTP
头部。其作用是确保后端服务器能够接收到正确的请求信息。以下是一些常用选项及其作用:
proxy_set_header Host $host;
- 作用: 将原始请求中的
Host
头部传递给后端服务器,保持客户端请求的主机名。- 示例:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
- 作用: 将客户端的真实 IP 地址传递给后端服务器,后端服务器可以获取到客户端的实际 IP 地址。
- 示例:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- 作用: 添加或更新
X-Forwarded-For
头部,通常包含客户端的 IP 地址及通过的代理服务器 IP 地址链。- 示例:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
- 作用: 将请求的协议(HTTP 或 HTTPS)传递给后端服务器,后端可以知道请求是通过哪个协议发起的。
- 示例:
proxy_set_header X-Forwarded-Proto $scheme;
示例配置
server {
listen 80;
location / {
proxy_pass http://backend_server;
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_set_header X-Forwarded-Proto $scheme;
}
}
在这个配置中:
proxy_pass
: 将请求转发到后端服务器。proxy_set_header
: 设置头部以确保后端服务器获取到正确的请求信息,如主机名、客户端 IP 和协议。通过正确配置
proxy_set_header
,可以帮助后端应用准确处理和记录客户端请求。
1、proxy_set_header Host
测试
location /{
proxy_pass http://172.16.1.7:80;
proxy_set_header Host $http_host;
}
测试效果?????
思路:
代理服务器转发的后端服务器的Nginx的nginx.conf主配置文件的access_log的格式是否添加$host来查看,来测试是否有内容变化
2、proxy_set_header X-Forwarded-For
测试
{
proxy_set_header X-Forwarded-For $proxy_add_x_forward_for;
}
更改前效果:
更改后效果:????????????????????????????
后端服务器Nginx的access.log中的最后一个$http_x_forwarded_for
会显示出来
二、Nginx反向代理-proxy其他参数简单介绍
# lb01连接web01的超时时间
proxy_connect_timeout 30;
# web01回传给lb01的超时时间
proxy_send_timeout 60;
# web01返回数据给lb01的超时时间
proxy_read_timeout 60;
# 开启了代理的缓冲区
proxy_buffering on;
# 开启了头部信息的缓冲区为32k
proxy_buffer_size 32k;
# 开启了4个128k的主体缓冲区
proxy_buffers 4 128k;
1、proxy_connect_timeout
2、proxy_send_timeout
3、proxy_read_timeout
4、proxy_buffering
5、proxy_buffers
三、负载均衡介绍及Nginx七层负载均衡
1、什么是负载均衡
负载均衡
是一种将网络流量分配到多个服务器上的技术,以确保没有单一服务器过载,从而提高系统的可用性、可靠性和性能。其主要目标是优化资源使用、提高响应速度,并增强系统的容错能力。负载均衡的工作原理
流量分配: 负载均衡器(Load Balancer)接收来自客户端的请求,并根据某种算法将请求分配到后端的多个服务器上。这些算法可能包括轮询、加权轮询、最少连接、IP
哈希等。健康检查: 负载均衡器定期检查后端服务器的健康状况。如果某台服务器出现故障,负载均衡器会自动将流量转发到其他健康的服务器上。
会话保持: 在某些情况下,负载均衡器可以维持客户端会话,确保同一用户的请求被转发到同一台服务器上,以便于处理用户的状态和数据。
SSL 终止: 负载均衡器可以处理 SSL/TLS 加密的终止,减轻后端服务器的加密负担,并提高整体性能。
负载均衡的生产应用
负载均衡在许多生产环境中都扮演着重要的角色,包括:
Web 应用: 为了处理大量的用户请求和保证网站的高可用性,常使用负载均衡将流量分发到多个 Web 服务器上。
数据库服务: 通过负载均衡器分发查询请求到多个数据库实例,以提高查询性能和系统可靠性。
电子商务平台: 高流量的电子商务平台需要负载均衡来处理大量的用户请求并确保交易的顺利进行。
云服务: 在云环境中,负载均衡器用于动态分配资源,优化应用性能,并保证高可用性。
内容分发网络 (CDN): 使用负载均衡将用户请求分发到地理上分布广泛的边缘节点,以提高内容传输速度和可靠性。
负载均衡是将流量分配到多个服务器上的技术,以优化资源使用、提高性能和保证系统的可靠性。
生产应用软件及技术
- Nginx: 高效的 Web 服务器和负载均衡器,支持反向代理、缓存和负载均衡。
- HAProxy: 高性能的负载均衡器和代理服务器,广泛用于处理 HTTP 和 TCP 流量。
- F5 BIG-IP: 企业级负载均衡解决方案,提供高级流量管理和安全功能。
- AWS Elastic Load Balancing (ELB): Amazon Web Services 提供的自动扩展负载均衡服务,支持多种负载均衡模式。
SLB 和 QLB
- SLB(Server Load Balancer): 服务器负载均衡器,通常用于将流量分配到多个服务器上。
- QLB(Quantum Load Balancer): 腾讯云的负载均衡服务,提供高效的流量管理和分配。
其他负载均衡技术
- ALB(Application Load Balancer): 处理应用层流量的负载均衡器,支持内容路由和基于请求的分配。
- NLB(Network Load Balancer): 处理网络层流量的负载均衡器,专注于高吞吐量和低延迟。
2、七层网络模型简述
“物 数 网 传 会 表 应”
3、Nginx四层负载均衡与Nginx七层负载均衡的区别
4、Nginx七层负载均衡配置
1)如何配置
客户端应用请求代理转发到一组upstream虚拟服务池
- 例子:
????
upstream web{
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server{
listen 80;
server_name test.xx.com;
location / {
proxy_pass http://web;
include proxy_params;
}
}
- *upstream名和proxy_pass名一定相同???
是的,自行测试:
2)proxy_next_upstream
5、Nginx负载均衡调度算法
1)默认的使用RR(Round Rbin)轮询算法
- 轮询什么意思??
2)加权(height)算法
-
什么是?
-
如何配置?
如何配置??
upstream web{
server 172.16.1.7:80 weight=3;
server 172.16.1.8:80;
}
server{
listen 80;
server_name test.xx.com;
location / {
proxy_pass http://web;
include proxy_params;
}
}
- 何时使用这个算法??
如:配置高的服务器,被设置的分配权重就大
3)ip_hash算法
-
什么意思?
-
如何配置?
-
何时使用?
如:可做会话保持
4)url_hash算法
-
什么意思?
-
如何配置?
-
何时使用?
如:可做会话保持
5)least_conn算法(最小连接数)
-
什么意思?
谁的连接数少,谁被优先分配到用户请求 -
如何配置?
-
何时使用?
6、Nginx负载均衡后端服务器状态修改参数
1)down
-
意思??
请求不分配到这台机器 -
配置?
upstream web{
server 172.16.1.7:80 down;
server 172.16.1.8:80;
}
server{
listen 80;
server_name test.xx.com;
location / {
proxy_pass http://web;
include proxy_params;
}
}
2)backup
-
意思??
预留的备用机 -
配置?
??
upstream web{
server 172.16.1.7:80 backup;
server 172.16.1.8:80;
}
server{
listen 80;
server_name test.xx.com;
location / {
proxy_pass http://web;
include proxy_params;
}
}
3)max_fails和fail_timeout
4)max_conns
*7、Nginx负载均衡健康检查配置
用于查看Nginx负载均衡中的每个服务器的状态