前言

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为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反向代理与负载均衡的更多相关文章

  1. Windos环境用Nginx配置反向代理和负载均衡

    Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...

  2. nginx的反向代理和负载均衡的一个总结

    之前一直觉的nginx的反向代理和负载均衡很厉害的样子,最近有机会接触了一下公司的这方面的技术,发现技术就是一张窗户纸呀,捅破了啥都明白了! 接下来先看一下nginx的反向代理: 简单的来说就是ngi ...

  3. nginx简单反向代理和负载均衡(ubuntu)

    nginx简单反向代理与负载均衡 环境:三台ubuntu 12.04.5 虚拟机    均装有nginx 1.1.19 以下u1(192.168.240.129) ,u2(192.168.240.13 ...

  4. nginx的反向代理和负载均衡的区别是什么 - 开源中国社区

    nginx的反向代理和负载均衡的区别是什么 - 开源中国社区   nginx的反向代理和负载均衡的区别是什么 #user  nobody;worker_processes  1;#error_log  ...

  5. nginx(三)反向代理和负载均衡

    nginx(三)反向代理和负载均衡 正向代理概念:比如在学校要上网,在学校内网是一个内网ip,需要连上公网就需要一个正向代理服务器. 反向代理概念: 看下图(Nginx只做请求的转发,后台有多个htt ...

  6. 七、CentOS 6.5 下 Nginx的反向代理和负载均衡的实现

    CentOS 6.5 下 Nginx的反向代理和负载均衡的实现 * 修复上面文章的问题: 复制出一个tomcat2之后,修改service.xml文件时,要修改三个端口: 1. <!-- 800 ...

  7. nginx实现反向代理和负载均衡

    利用nginx做反向代理和负载均衡是减轻服务器压力的有效方式.nginx代理服务器接收多个客户端请求, 根据配置的参数均衡到每个tomcat服务器上,tomcat处理请求,返回响应结果给nginx,n ...

  8. Nginx使用反向代理实现负载均衡

    Nginx使用反向代理实现负载均衡 yls 2019-9-20 简介 基于docker容器以及docker-compose,所以需要自学docker在linux环境的基本使用 使用两个tomcat作为 ...

  9. nginx 配置反向代理,负载均衡实战解析

    前言:NGINX的反向代理和负载均衡是网站架构中经常用到的一种高并发,高可用的方案,下面我们直接实战操作,当然理论也是要的. 一.反向代理 过程:反向代理:客户端 一>代理 <一> ...

  10. [笔记]nginx配置反向代理和负载均衡

    1.nginx配置文件:源码安装情况下,nginx.conf在解压后的安装包内.yum安装,一般情况下,一部分在/etc/nginx/nginx.conf中,一部分在/etc/nginx/conf.d ...

随机推荐

  1. 2022-09-24:以下go语言代码输出什么?A:1;B:3;C:13;D:7。 package main import ( “fmt“ “io/ioutil“ “net/

    2022-09-24:以下go语言代码输出什么?A:1:B:3:C:13:D:7. package main import ( "fmt" "io/ioutil" ...

  2. 2022-03-27:class AreaResource { String area; // area表示的是地区全路径,最多可能有6级,比如: 中国,四川,成都 或者 中国,浙江,杭州 Str

    2022-03-27:class AreaResource { String area; // area表示的是地区全路径,最多可能有6级,比如: 中国,四川,成都 或者 中国,浙江,杭州 Strin ...

  3. 2021-06-04:给定三个参数:二叉树的头节点head,树上某个节点target,正数K,从target开始,可以向上走或者向下走。返回与target的距离是K的所有节点。

    2021-06-04:给定三个参数:二叉树的头节点head,树上某个节点target,正数K,从target开始,可以向上走或者向下走.返回与target的距离是K的所有节点. 福大大 答案2021- ...

  4. Qt数据可视化项目

    一.创建项目(步骤按常规来即可) 二.ui设计界面 控件的使用 默认视角:Label标签和horizontalSlider标签 水平旋转:Label标签和horizontalSlider标签 垂直旋转 ...

  5. Java实现猜拳小游戏

    Java实现猜拳游戏的核心在于电脑随机数的生成,Java中的随机数生成方法是:首先引入包   import java.util.*;  然后   int r=new Random().nextInt( ...

  6. windows内核学习一

    变量类型 kernel user ULONG unsigned long PULONG unsigned long* UCHAR unsigned char PUCHAR unsigned char* ...

  7. uniapp主题切换功能的第一种实现方式(scss变量+vuex)

    随着用户端体验的不断提升,很多应用在上线的时候都要求做不同的主题,最基本的就是白天与夜间主题. 就像b站app主题切换,像这样的 uniapp因为能轻松实现多端发布而得到很多开发者的青睐,但每个端的实 ...

  8. hugp-MemE关键美化

    配置front matter 使用vscode snippet快捷生成front matter 参考博客:vs-code-workflows-for-hugo. markdown-snippets-n ...

  9. SYCTF2023 WEB writeup

    CarelessPy 一进来就是个任意文件下载功能,不过做了些限制,这题从头到尾都在骂杂鱼...(虽然我确实是(bushi) 查看页面源代码,给了个/eval /login 两个路由,/eval是个目 ...

  10. 手写RPC框架之泛化调用

    一.背景 前段时间了解了泛化调用这个玩意儿,又想到自己之前写过一个RPC框架(参考<手写一个RPC框架>),于是便想小试牛刀. 二.泛化调用简介 什么是泛化调用 泛化调用就是在不依赖服务方 ...