首页 > 系统相关 >Nginx - 反向代理

Nginx - 反向代理

时间:2023-08-07 16:11:36浏览次数:30  
标签:缓存 http 代理 server Nginx 反向 proxy upstream 上游

负载均衡

image

Round-Robin

upstream name {...} 指定一组上游服务器
功能:依次轮询挨个进行的方式。在加权(4C8G 8C16G权重不同)轮询的方式访问。

基于客户端ip地址的hash

功能:以客户端的IP地址作为hash算法的关键字,映射到特定的上游服务器。

基于任意关键字实现hash

hash key [consistent]

一致性hash

之前的两种Hash,当上游服务器发生变化时(宕机或扩容),原有的hash算法可能引发大量的路由变更(原来hash%5, 因为有5台,现在hash%4),产生严重后果(如缓存大范围失效)。

扩容前

image

扩容后

image

最少连接算法least-connection

功能:从所有上游服务器中,找出当前并发连接数最少的一个,将请求转发到它。
least_conn [upstream]

反向代理与缓存

image

HTTP反向代理流程

image

buffering on/off 考虑:nginx的并发能力强,上游服务的并发能力弱,客户端公网网速慢,和上游服务内网网速快;proxy_buffering 默认是on, off的话,边读边发,由于受限于客户端网速,就会一直占用上游服务器的连接,而上游服务器的并发能力是比较弱的。

proxy_request_buffering on|off
on:

  • 客户端网速慢
  • 上游服务并发处理能力弱
  • 适应高吞吐量的场景
    off:
  • 更及时的相应
  • 降低nginx读写磁盘的消耗
  • 一旦开始发送内容,proxy_next_upstream功能失败

proxy_pass url
URL参数规则:

  • URL必须以http://或者https://开头,接下来是域名,IP,socket地址或者upstream的名字
  • 当URL参数中携带URI与否会导致向上游请求的URL不同
  • URL必须以http://或者https://开头,接下来是域名,IP,socket地址或者upstream的名字
  • 当URL参数中携带URI与否会导致向上游请求的URL不同
    • 不携带URI: 原封不动
    • 携带URI,将location参数中匹配上的一段替换为该URI
      e.g.
server {
	listen 8012;
	default_type text/plain;
	return 200 '8012 response. uri: $uri\n'
}

conf1:

upstream proxyups {
	server 127.0.0.1:8012 weight=1;
}

server {
	server_name proxy.aoao.tech;

	location /a {
		proxy_pass http://proxyups;
		#...
	}
}

curl proxy.aoao.tech/a/b/c -> 8012 response. uri:/a/b/c
conf2:

upstream proxyups {
	server 127.0.0.1:8012 weight=1;
}

server {
	server_name proxy.aoao.tech;

	location /a {
		proxy_pass http://proxyups/www;
		#...
	}
}

curl proxy.aoao.tech/a/b/c -> 8012 response. uri:/www/b/c

  • 该URL参数中可以携带变量
  • 更复杂的URL替换,可以在location内的配置添加rewrite break语句

向上游服务器建立连接

proxy_connect_timeout time [http, server, location] 与上游服务器的三次握手
超时后,会向客户端生成http响应, 响应码为502

  • 上游连接启用TCP keepalive
    TCP层是操作系统做的,keepalive会发心跳包
    proxy_socket_keepalive on|off [http, server, location]

  • 上游连接启用HTTP keepalive
    keepalive connections [upstream]
    keepalive_requests numbser [upstream]

上游出现错误的容错方案

proxy_next_upstream error|timeout|invalid_header|http_500|... [http, server, location]
e.g. proxy_next_upstream error 当上游服务返回错误时,nginx自动选择其他另外的上游服务,来屏蔽这个错误。

浏览器缓存

image

Nginx缓存

proxy_cache zone|off [http, server, location]
proxy_cache_path指令:

  • inactive 在inactive时间内没有被访问的缓存,会被淘汰掉;默认10分钟
  • max_size 最大缓存文件大小,超出后由cache manager进程按照LRU链表淘汰
  • ...
    通过响应头部控制缓存时长
  • X-Accel-Expire 单位秒,为0时禁止nginx缓存内容
  • 响应头中若含有Set-Cookie则不缓存
  • 响应头中含有Vary:* 则不缓存

image

Websocket反向代理

image

image

HTTP 2.0

主要特性:

  • 传输数据量大幅减少
    • 以二进制方式传输
    • 标头压缩
  • 多路复用及相关功能
    • 消息优先级
  • 服务器消息推送
    • 并行推送

连接Connection:1个TCP连接,包含一个或者多个Stream
数据流Stream: 一个双向通讯数据流,包含多个Message
消息Message:对应HTTP1中的请求或者响应,包含一条或者多条Frame
数据帧Frame:最小单位,以二进制压缩格式存放HTTP1中的内容

image

协议分层

image

多路复用

image

传输时无序,接收时组装

image

Frame格式

image

标签:缓存,http,代理,server,Nginx,反向,proxy,upstream,上游
From: https://www.cnblogs.com/rachel-aoao/p/nignx_reverse_proxy.html

相关文章

  • 代理IP与Socks5代理:跨界电商、游戏与爬虫的技术赋能
    一、代理IP与Socks5代理:简介与区别代理IP:代理IP是一种通过代理服务器转发网络请求的技术。它可以隐藏用户的真实IP地址,提供匿名访问,是实现地理突破的关键工具。Socks5代理:Socks5代理采用SOCKS5协议,相对于传统代理IP技术,支持TCP和UDP协议,提供更高性能、更强安全性和更全面的功能。......
  • Nginx 解析漏洞复现
    Nginx解析漏洞复现Nginx解析漏洞复现版本信息:Nginx1.x最新版PHP7.x最新版由此可知,该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。docker-composeup-ddocker-composeconfigdocker-composedown访问http://10.10.10.154/uploadfiles/nginx.png和ht......
  • cent os nginx 部署
    1.在安装Nginx之前,要确保已经安装了需要的软件:gcc、pcre-devel、zlib-devel、openssl-devel。如果没有安装,执行下面命令。  yum-yinstallgccpcre-develzlib-developensslopenssl-devel2、进入/usr/local/文件夹 cd/usr/local3、下载nginxwgethttps://nginx.or......
  • nginx:配置文件(nginx.conf)各项说明
    学习自:Nginxnginx.conf配置文件详解_nginxconf配置详解_一片星空~的博客-CSDN博客一、配置文件结构worker_processes1;events{worker_connections1024;}http{includemime.types;default_typeapplication/octet-stream;sendfile......
  • 拆解爬虫使用隧道HTTP代理的原理
    今天,让我们来一起探索一下爬虫如何利用隧道HTTP代理来实现无限可能!本文将为你详解这一原理,并分享一些实用的操作技巧。快来和我一起探索吧!一、隧道HTTP代理是什么?在爬虫的世界里,隧道HTTP代理就像是一个隐身斗篷,可以帮助我们在互联网上隐藏身份。它实际上是位于我们和目标网站之间的......
  • Ingress-nginx安装(helm)
    NginxIngress简介在Kubernetes集群中,Ingress作为集群内服务对外暴露的访问接入点,其几乎承载着集群内服务访问的所有流量。Ingress是Kubernetes中的一个资源对象,用来管理集群外部访问集群内部服务的方式。您可以通过Ingress资源来配置不同的转发规则,从而达到根据不同的规则设置访问......
  • 部署Nginx配置动静分离
    一、Nginx正则表达式和动静分离1、Nginx处理动态网站数据的方式 1)动静分离 静态请求Nginx处理 动态请求通过Nginx正则表达式转发到LAMP平台 2)LNMP处理  Nginx服务器配置php通过php-fpm处理php语言2、Nginx功能  1)网站服务器  默认只能处理静态数据 处理客户......
  • 前端学习笔记202306学习笔记第四十八天-代理解决跨域问题1
        ......
  • Nginx安装与部署
    1、安装工具包wget、vim和gccyuminstall-ywget yuminstall-yvim-enhanced yuminstall-ymakecmakegccgcc-c++ 2、下载nginx安装包wgethttp://nginx.org/download/nginx-1.6.2.tar.gz3、安装依赖包yuminstall-ypcrepcre-develyuminstall-yzlibzlib-devel......
  • nginx离线安装配置,项目部署相关配置,https ssl配置
    一、nginx安装1。通过nginx.org下载源码安装包,或直接wget下载点击链接去下载选择对应系统版本即可。我这里从稳定版【Stableversion】下载2.安装nginx依赖环境包yuminstallgcc-c++pcrepcre-develzlibzlib-developensslopenssl-devel3.上传或者下载nginx安装......