新风花雪月 发表于 2018-11-13 06:14:57

Nginx Http_proxy module学习第一部分

  1、响应头文件
  Open Buffer{
  #进行判断后端服务返回的响应文件是否大大于响应头大小设置
  if proxy_buffer_size >= c.proxy_buffer_size:
  #进行缓存,每个连接缓冲区最大数量,proxy_buffers
  c.proxy_buffer_size(number,size) >> connect.hash(c.proxy_buffer_size)
  else:
  #存入临时文件夹
  path = proxy_temp_path
  #如果容量满了,不存临时目录。
  if path.size if full:
  sys.exit
  #如果单个临时文件的大小大于后端的响应文件大小时写入临时文件
  if proxy_temp_file_write_size >= c.proxy_buffer_size:
  c.proxy_buffer_size >> temp.hash(c.proxy_buffer_size)
  }
  Close Buffer{
  #同步给客户端,然后再按照proxy_buffer_size设置的大小去取接下来的头文件并直接同步给客户端。
  size = proxy_buffer_size
  #不管后端的响应头信息由proxy_ignore_headers控制,不写进来了。
  #如果后端服务器传递响应头关闭代理缓存则直接发送给客户端,不缓存头信息。
  if realserver.X-Accel-buffering = NO:
  send(c)
  else:
  #获取头信息并发送给客户端
  while True:
  get.client.hearder
  send(c)
  #如果连接的缓冲满了就写临时,否则写缓冲里。注意proxy_busy_buffers_size参数
  #也就是说不管有多大都会发送完不会无故结束。
  if connect.hash(c.proxy_buffer_size) is full:
  temp.hash(c.proxy_buffer_size)
  else:
  connect.hash(c.proxy_buffer_size)
  }
  #指定用于页面缓存的共享内存,off参数可以屏蔽从上层配置继承的缓存功能。
  proxy_cache zone|off
  #定义nginx不从缓存取响应的条件
  proxy_cache_bypass string
  proxy_no_cache
  #定义如何生成缓存的键default:proxy_cache_key $scheme$proxy_host$request_uri;
  proxy_cache_key string; key:vaule
  #定义相同的请求,同时只允许一个请求发往后端,并根据proxy_cache_key往内存中写新
  #条目,直接proxy_cache_lock_time超时被释放
  proxy_cache_lock on |off #default off
  proxy_cache_lock_timeout time #default 5s
  #设置响应被缓存的最小请求次数,即至少要请求多少次才缓存
  proxy_cache_min_uses number; #default 1
  #设置缓存的路径和其他参数。缓存数据是保存在文件中的,缓存的键和文件名都是在代理URL上执行MD5的结果。
  #levels参数定义了缓存的层次结构。
  proxy_cache_path path keys_zone=name:size
   ;
  #文件名是由urlmd5生成,
  #为什么临时目录要和缓存目录放同一分区?因为被响应的请求首先是写入一个临时文件,然后再
  #copy到缓存文件夹,如果是不同分区就要真正COPY,而同一分区就是重命名的操作,指一下metadata
  #如果后端服务器出现状况,nginx是可以使用过期的响应缓存的。这条指令就是定义何种条件下允许开启此机制。
  proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_404 | off ...;
  #为不同的响应状态码设置不同的缓存时间。可以用any
  proxy_cache_valid time;
  #设置与后端服务器建立连接的超时时间。应该注意这个超时一般不可能大于75秒。
  proxy_connect_timeout time;
  #nginx默认不会将“Date”、“Server”、“X-Pad”,和“X-Accel-...”响应头发送给客户端。proxy_hide_header指令则可以设置额外的响应头,
  #这些响应头也不会发送给客户端。相反的,如果希望允许传递某些响应头给客户端,可以使用proxy_pass_header指令。
  proxy_hide_header field;
  #设置代理使用的HTTP协议版本。默认使用的版本是1.0,而1.1版本则推荐在使用keepalive连接时一起使用。
  proxy_http_version 1.0 | 1.1
  #决定当客户端在响应传输完成前就关闭连接时,nginx是否应关闭后端连接。
  proxy_ignore_client_abort on | off;
  #不处理后端服务器返回的指定响应头。
  proxy_ignore_headers field ...;

页: [1]
查看完整版本: Nginx Http_proxy module学习第一部分