nginx-http反向代理与负载均衡
前言
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。——摘自百度百科
简单的HTTP反向代理
nginx默认集成了代理模块,因此可以直接在server域配置proxy_pass实现反向代理。
假设nginx服务器的IP为192.168.0.10,后端服务器
server {
listen 80;
location / {
proxy_pass http://192.168.0.11:8000;
}
}
负载均衡
负载均衡需要在upstream域配置,示例:
http {
# ...
upstream backend {
server 192.168.0.11:80 weight=80;
server 192.168.0.12:80;
server 192.168.0.13:80 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
}
后端服务器指令参数
- weight: 权重,默认为1。示例: weight=80
- max_fails: 最大失败数,默认为1。示例: max_fails=3。被代理服务器在
fail_timeout规定时间内的最大请求失败数,超过设定次数后,被代理服务器便被认为不可用。 - fail_timeout: 失败超时,默认为10s。示例:fail_timeout=15s。被代理服务器被置为不可用的最长时间。
- backup: 备份服务器。将被代理服务器标记为备份服务器,当其他非备份服务器不可用时,会把请求转发给备份服务器。
- down: 无效服务器。将被代理服务器标记为无效服务器。
- max_conn: 最大连接数,默认为0,表示没限制。示例:max_conn=100。与被代理服务器建立活动连接的最大数量。
负载均衡策略
默认负载均衡策略为轮询,通过权重配置可实现加权轮询。
hash:哈希策略。(暂时还没试过咋用)ip_hash:确保同一个客户端的请求总会被同一个被代理服务器处理。least_conn:最少连接策略。在考虑被代理服务器组权重的前提下,将客户端请求分配给拥有最少活跃连接数的被代理服务器。random:随机负载策略。将客户端请求随机分配给被代理服务器。
负载均衡长连接
默认配置下,HTTP协议的负载均衡与被代理服务器之间的连接都是HTTP/1.0的短连接。如果使用长连接,可以在一个TCP连接中传输多个HTTP请求和响应,减少了建立和关闭TCP连接的消耗和延迟,提高了传输效率。
配置示例:
upstream backend {
server 192.168.0.11:80;
server 192.168.0.12:80;
# 长连接缓存池大小为32
keepalive 32;
# 每条长连接最大复用请求数为2000
keepalive_requests 2000;
}
server {
location/ {
proxy_pass http://backend;
# 启用http/1.1版本与被代理服务器建立连接
proxy_http_version 1.1;
# 清空请求头属性字段Connection的内容
proxy_set_header Connection "";
}
}
反向代理简单优化
http {
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g;
tcp_nodelay off;
server {
listen 8081;
location / {
proxy_pass http://192.168.67.232:80/;
# 启用响应数据缓冲区
proxy_buffering on;
# 设置每个HTTP请求读取上游服务器响应数据缓冲区的大小为64KB
proxy_buffers 8 8k;
# 设置每个HTTP请求读取响应数据第一部分缓冲区的大小为8KB
proxy_buffer_size 8k;
# 接收上游服务器返回响应数据时,同时用于向客户端发送响应的缓冲区的大小为16KB
proxy_busy_buffers_size 16k;
# 不限制每个HTTP请求每秒读取上游服务器响应数据的流量
proxy_limit_rate 0;
# 启用客户端HTTP请求读取缓冲区功能
proxy_request_buffering on;
# 设置发送给上游服务器的头属性字段Host为客户端请求头字段Host的值
proxy_set_header Host $host:$server_port;
# 设置发送给上游服务器的头属性字段X-Real-IP为客户端IP
proxy_set_header X-Real-IP $remote_addr;
# 设置用于缓存的共享内存
proxy_cache STATIC;
# 设置200响应码的缓存时间为1天
proxy_cache_valid 200 1d;
# 出现指定条件时,使用已经过期的缓存响应
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
}
}
nginx-http反向代理与负载均衡的更多相关文章
- Windos环境用Nginx配置反向代理和负载均衡
Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...
- nginx的反向代理和负载均衡的一个总结
之前一直觉的nginx的反向代理和负载均衡很厉害的样子,最近有机会接触了一下公司的这方面的技术,发现技术就是一张窗户纸呀,捅破了啥都明白了! 接下来先看一下nginx的反向代理: 简单的来说就是ngi ...
- nginx简单反向代理和负载均衡(ubuntu)
nginx简单反向代理与负载均衡 环境:三台ubuntu 12.04.5 虚拟机 均装有nginx 1.1.19 以下u1(192.168.240.129) ,u2(192.168.240.13 ...
- nginx的反向代理和负载均衡的区别是什么 - 开源中国社区
nginx的反向代理和负载均衡的区别是什么 - 开源中国社区 nginx的反向代理和负载均衡的区别是什么 #user nobody;worker_processes 1;#error_log ...
- nginx(三)反向代理和负载均衡
nginx(三)反向代理和负载均衡 正向代理概念:比如在学校要上网,在学校内网是一个内网ip,需要连上公网就需要一个正向代理服务器. 反向代理概念: 看下图(Nginx只做请求的转发,后台有多个htt ...
- 七、CentOS 6.5 下 Nginx的反向代理和负载均衡的实现
CentOS 6.5 下 Nginx的反向代理和负载均衡的实现 * 修复上面文章的问题: 复制出一个tomcat2之后,修改service.xml文件时,要修改三个端口: 1. <!-- 800 ...
- nginx实现反向代理和负载均衡
利用nginx做反向代理和负载均衡是减轻服务器压力的有效方式.nginx代理服务器接收多个客户端请求, 根据配置的参数均衡到每个tomcat服务器上,tomcat处理请求,返回响应结果给nginx,n ...
- Nginx使用反向代理实现负载均衡
Nginx使用反向代理实现负载均衡 yls 2019-9-20 简介 基于docker容器以及docker-compose,所以需要自学docker在linux环境的基本使用 使用两个tomcat作为 ...
- nginx 配置反向代理,负载均衡实战解析
前言:NGINX的反向代理和负载均衡是网站架构中经常用到的一种高并发,高可用的方案,下面我们直接实战操作,当然理论也是要的. 一.反向代理 过程:反向代理:客户端 一>代理 <一> ...
- [笔记]nginx配置反向代理和负载均衡
1.nginx配置文件:源码安装情况下,nginx.conf在解压后的安装包内.yum安装,一般情况下,一部分在/etc/nginx/nginx.conf中,一部分在/etc/nginx/conf.d ...
随机推荐
- 【Python基础】集合的基本使用
Python中的集合是一种无序且唯一的数据结构.集合是通过花括号{}或者set()函数来创建的. 创建集合 s = set() 声明空集合 s = {1,2,3,4,5} 声明非空集合 添加元素 s. ...
- vue【解决方案】页面/路由跳转后,滚动条消失,页面无法滚动
原因解析: vue项目中,页面/路由跳转后,body 的内联样式变成 overflow:hidden 解决方案: 使用路由守卫,在页面/路由跳转后,将body 的overflow设置为auto src ...
- 2020-01-16:我截获了登录token的话,是不是就获得了登录状态,这样就不安全了。如何保证安全?
福哥答案2020-01-06:[知乎答案:](https://www.zhihu.com/question/439602796)首先,Token 一般放在 Header 或者 Cookies 中,Ht ...
- 2022-05-26:void add(int L, int R, int C)代表在arr[L...R]上每个数加C, int get(int L, int R)代表查询arr[L...R]上的累加
2022-05-26:void add(int L, int R, int C)代表在arr[L-R]上每个数加C, int get(int L, int R)代表查询arr[L-R]上的累加和, 假 ...
- 2021-02-23:给定一个正数n,求n的裂开方法数。规定:后面的数不能比前面的数小 。比如4的裂开方法有: 1+1+1+1、1+1+2、1+3、2+2、4,5种,所以返回5。
2021-02-23:给定一个正数n,求n的裂开方法数.规定:后面的数不能比前面的数小 .比如4的裂开方法有: 1+1+1+1.1+1+2.1+3.2+2.4,5种,所以返回5. 福哥答案2021-0 ...
- SQL Server 2014 英文版安装教程
安装过程如下 1. 点击setup开始安装. 2. 选择如下的全新安装. 3. 自动生成产品密钥,然后点击下一步. 4. 勾选接受条款,然后点击下一步. 5. 自动更新根据实际情况进行选择,点击下一步 ...
- 园子的商业化努力-AI人才服务:招募AI导师
各位园子的小伙伴: 感谢大家对园子的支持,园子差不多接近20年的历程,一直是最低配模式生存和发展,感谢大家对于前段时间的困局给予了商业化的各种建议!在大家的鼓励与支持之下,园子的商业化努力正在以更快的 ...
- Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535.
问题描述 新建表或者修改表varchar字段长度的时候,出现这个错误 Row size too large. The maximum row size for the used table type, ...
- Python基础 - 解释性语言和编译性语言
什么是机器语言 计算机是不能理解高级语言,当然也就不能直接执行高级语言了.计算机只能直接理解机器语言,所以任何语言,都必须将其翻译成机器语言,计算机才能运行高级语言编写的程序. 如何把我们写的代码 ...
- Qt+QtWebApp开发笔记(四):http服务器使用Session和Cookie实现用户密码登录和注销功能
前言 前面实现了基础的跳转,那么动态交互中登录是常用功能. 本篇实现一个动态交互的简单登录和注销功能,在Qt中使用Session和Cookie技术. Demo 下载地址 链接:ht ...