配置文件【gloabl 和 http】

nginx
nginx 进程关系: nginx 由master和worker进程组成,master进程负责管理work进程,worker进程负责处理具体的任务. # 反向代理

graph LR A[nginx.conf] B[global] C[http] C1[upstream] C2[server] C21[location] C211[if] D[stream] D1[upstream] D2[server] A -.->|worker进程配置| B A -.->|http服务配置| C C -.-> C1 C -.-> C2 C2 -.-> C21 C21 -.-> C211 D -.-> D1 D -.-> D2 A -.- |4层反向代理|D subgraph 反向代理和http服务 C1 C2 end subgraph 7层服务配置 C end subgraph 4层反向代理 D1 D2 end subgraph 4层服务配置 D end subgraph 全局配置 B end subgraph 主配置文件 A end

调度算法

Nginx使用的负载均衡调度算法主要有以下几种:

  1. 轮询(rr Round Robin):这是默认的负载均衡算法。每个请求按时间顺序逐一分配到不同的后端服务器,如果服务器down掉,能自动剔除。

  2. 加权轮询(wrr Weighted Round Robin):与轮询类似,但是不同的后端服务器可以设置不同的权重,可以根据服务器的处理能力,分配不同数量的请求。权重越高,分配的请求越多。

  3. 最少连接(least_conn Least Connections):优先分配给当前连接数最少的服务器,适用于请求处理时间相差较大的情况。

  4. IP Hash(ip_hash):根据请求的IP的hash结果分配,每个请求会固定访问一个后端服务器,适用于需要会话保持的应用。这有助于为缓存服务器实现更高的缓存命中率,如果其中一台服务器需要临时删除,则应使用down参数标记该服务器,以保留客户端IP地址的当前哈希值

  5. URL Hash(url_hash):根据请求的URL的hash结果来分配请求,使得每个URL定向到同一个后端服务器,适用于服务器缓存时提高效率。

  6. Fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。

  7. URL参数(第三方):按照URL中带的参数进行hash,然后进行请求分发,可以实现会话保持。

以上算法可以通过在Nginx的http或stream模块中使用upstream指令来配置。

四层代理

nginx 在1.9 版本后开始支持 4层代理

user  nginx;
worker_processes  1;

events {
    worker_connections  1024;
}
stream {
        log_format main '$remote_addr [$time_local] '
             '$protocol $status $bytes_sent $bytes_received '
             '$session_time "$upstream_addr" '
             '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
        upstream mysql {
                server 172.16.100.10:3306 weight=1 max_fails=3 fail_timeout=30s;
                server 172.16.100.11:3306 weight=1 max_fails=3 fail_timeout=30s;
                server 172.16.100.12:3306 weight=1 max_fails=3 fail_timeout=30s;
        }
        server {
                listen 3306;
                proxy_connect_timeout 2s;
                proxy_timeout 900s;
                proxy_pass mysql;
                access_log  /dev/stdout main;
          }
}

七层代理

user  nginx;
worker_processes  1;

events {
    worker_connections  1024;
}
http {
upstream backend {
    # backup 当其他主机失败后使用该主机,不能用在 hash ip_hash 和random 调度算法中
    # down 当前主机不可用,当使用ip_hash 中标记为down不会影响hash值
    server 172.16.100.10:8080 weight=1 max_fails=3 fail_timeout=30s;
    server 172.16.100.11:8080 weight=1 max_fails=3 fail_timeout=30s;
    server 172.16.100.12:8080 weight=1 max_fails=3 fail_timeout=30s;
  
    server 172.16.100.13:8080   backup;
    server 172.16.100.14:8080   backup;
}

server {
    # 设置X-Real-IP头,使用客户端的真实IP地址。
	proxy_set_header  X-Real-IP $remote_addr;
	# 设置X-Forwarded-For头,添加原始请求的IP地址
	proxy_set_header  X-Forwarded-For $remote_addr;
    # 设置代理请求的Host头,使用请求的原始主机名
	proxy_set_header Host $host;
	client_max_body_size 0;
    location / {
        
        proxy_pass http://backend;
        
   		}
	}
}

参数解释[7层代理]

  • 让应用获取到真实的用户ip

    位置:server、location 指令下

    	# 设置X-Real-IP头,使用客户端的真实IP地址。
    	proxy_set_header  X-Real-IP $remote_addr;
    	# 设置X-Forwarded-For头,添加原始请求的IP地址
    	proxy_set_header  X-Forwarded-For $remote_addr;
    
  • 设置代理请求的Host头,使用请求的原始主机名

    位置:server、location 指令下

        # 设置代理请求的Host头,使用请求的原始主机名
        proxy_set_header Host $host
    
  • 客户端请求的最大大小

    位置:http 、server、location指令下

    # 设置客户端请求的最大body大小为50MB
    client_max_body_size 50m;
    # 设置客户端请求body的缓冲区大小为256KB
    client_body_buffer_size 256k;
    
# 关闭代理服务器的重定向功能。
proxy_redirect off;

timeout

# 设置代理连接超时时间为30秒。
proxy_connect_timeout 30;

# 设置代理发送请求的超时时间为30秒。
proxy_send_timeout 30;

# 设置代理读取响应的超时时间为60秒。
proxy_read_timeout 60;

buffer

#设置代理缓冲区的大小为4KB
proxy_buffer_size 4k;

# 设置代理缓冲区的数量和大小 为4*32KB。
proxy_buffers 4 32k;

# 设置代理忙碌缓冲区的大小为64KB。
proxy_busy_buffers_size 64k;

临时文件

# 设置代理临时文件写入大小为64KB。
proxy_temp_file_write_size 64k;

# 设置代理临时文件的最大大小为128MB。
proxy_max_temp_file_size 128m;

提高代理的容错能力

# 定义当出现错误、超时、无效头部、或HTTP状态码为500、503、404时,请求将被转发到下一个上游服务器。
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;

缓存静态内容到本地磁盘

# 开启代理存储静态内容到磁盘的功能
proxy_store on;

# 设置代理存储文件的访问权限。
proxy_store_access user:rw group:rw all:r;

# 定义了代理临时文件存储的路径
proxy_temp_path /dev/shm/nginx_proxy;
posted @ 2021-04-07 10:22  mingtian是吧  阅读(324)  评论(0编辑  收藏  举报