设为首页 收藏本站
查看: 758|回复: 0

[经验分享] nginx 面试

[复制链接]

尚未签到

发表于 2018-11-15 11:38:29 | 显示全部楼层 |阅读模式
  nginx
  【注意nginx中,正则表达式的括号引用不是\1而是$1】
  pam linux资源限定看一下
  web服务器:http,https协议的实现
  反代服务器:http reverse proxy,smtp/pop3 reverse proxy
  smtp:简单的邮件发送服务
  pop3:邮局协议,存放邮件的
  imap4:互联网邮件访问协议,pop3升级版
  MIME:多功能的互联网邮件扩展
  major/minor
  http协议借助了mime来传输多媒体服务
  web资源:URL
  schem://user:password@host:port/path/to/some;params?perty#frag
  http协议的报文格式
  startline起始行
  name:value
  name:value   header首部,有多个name:value组成
  报文的主体部分
  request:
  
  
  response:
  
  
  上边就是http协议的报文的具体格式,具体的事例,可以再自己用的浏览器上查看,例如你使用的是chrome的话可以按f12来查看,或者直接使用服务器插件查看
  tcpdump wireshark tshark
  接下来分开来说明各个部分的含义
  1.method请求方法 打算以何种机制获得资源 表明客户端希望服务器对资源执行的动作
  GET 下载
  POST 提交表单将表单的数据基于body发送过去
  HEAD 只要head不要body
  TRACE 追踪资源,客户端到资源经过了那些web网关
  客户端-正向代理---网关----反向代理--二级反向代理-资源
  OPTIONS 请求服务器列出来某一个资源多支持的所有请求方法
  webDAV:web的分布式版本协作功能,一般关闭,风险太大,开启后delete put可用
  DELETE 删除
  PUT 上传
  2.status:状态码 告知客户端此次的响应是不是成功
  三位数字,1xx 2xx ... 5xx
  表明请求处理的状态
  1xx:100 101 信息提示
  2xx:成功类响应码 200-206;最常见的是200,资源已经正常发送
  3xx:重定向的响应码 300-305
  301(永久重定向 永久移动
  302(临时重定向 临时移动
  304(资源没有修改
  (tips:有的时候资源可能移动到了新的地址,这个时候返回一个状态码,请加上新位置的信息,叫做重定向,返回码+location 值
  这个值是新地址)
  客户端的缓存时有期效的,每次到期了再去服务器上请求的时候会回复一个304表示资源没有改变,如果资源改变了会给一个新的值
  并且回复200的响应码
  4xx:400-415 错误类信息,主要是客户端错误,权限不够资源不再账号不对
  404资源不再
  403没有权限或对方拒绝你
  401服务器让你输密码是用401响应
  5xx:500-505 错误响应 服务器错误
  500服务器内部错误,配置文件错误导致内部逻辑错误,或程序语法错误
  502反向代理服务器与原始上游服务器无法再有效时间内获得资源或无法通信
  3.headers:请求响应报文的首部
  媒体格式 MIME
  major/minor
  name:value
  首部分类:
  1.通用首部 请求响应报文都可以使用
  date 报文创建时间
  connection 链接状态 keep-alive长连接 close短链接
  via 报文经由的中间的代理服务器
  cache-control 缓存控制 1.1启用的
  2.请求首部 请求专用
  accept:可接受的媒体媒介类型;(MIME机制可以传输多媒体信息,http只传输超文本)
  accept-charest 接受的字符集格式
  accept-encoding:接受的编码格式
  accept—language:接受的语言
  client-ip;允许的客户端主机ip
  host:请求的服务器名称和端口
  referer:包含当前正在请求的资源的上一级资源
  user-agent:客户顿代理
  a.条件式请求首部
  except
  if-modified-since:某一时间后是不是发生过修改
  un
  if-none-match本地缓存中存储的文件的etag值是否与服务器对应的资源不相同
  if-match
  b.安全请求首部
  authrization:向服务器发送账号密码
  cookie:向服务器发送cookie
  3.响应首部 响应专用
  a.信息行首部
  age:相应时长
  server:服务器端软件程序的名称版本等
  b.协商首部
  accept-ranges:服务器 端可接受的请求类型;*所有类型
  vary:服务器查看您的其他首部列表,变化的
  c.安全首部
  set-cookie:给客户端设定cookie
  WWW-AUTHENTICAT:认证质询
  d.实体首部
  allow:对此实体可使用的方法
  location:资源的真正地址
  content-encoding:资源编码格式
  资源语言
  长度
  地址
  类型
  e.缓存相关
  etag:缓存首部
  expires:实体过期时间
  last-modified:最近一次修改时间
  4.实体首部
  5.扩展首部 用户自己定义的
  IO模型  unix网络编程
  阻塞性IO模型,非阻塞IO模型,复用性IO模型,事件驱动模型,异步IO模型
  同步/异步:
  阻塞/非阻塞:
  关注调用者返回结果前的状态,结果回来前能不能干别的事
  阻塞:blocking 调用结果返回之前调用者被挂起,什么都不能做只能等着
  非阻塞:nonblocking 调用结果返回之前调用者不会被挂起,处于忙等待,忙等待就是多久就回来看一下结果有没有回来
  阻塞会被装入sleeping状态
  异步:被调用者通过(状态),(通知)或者(回调)的方式,通知调用者被调用的运行状态
  阻塞性IO:两个阶段全被阻塞
  非阻塞IO:第一阶段没被阻塞,盲等,但当发现数据写入到内存中后开始阻塞,通常是串行
  回调的通知方式有两种:
  同步/异步:关注消息通知机制
  同步:等待对方返回消息
  边缘触发:只通知一次,听不见就拉倒
  水平触发:听不见就一遍又一遍的通知
  什么叫阻塞性IO  两个阶段 wait for data,copy data
  复用性IO:额外在内核中多加了一项机制,在调用后加入一层SELECT(),用户阻塞在这层上,内核处理完后通知层,这层两边都是阻塞的
  SELECT():层可以使是个总的,也可以每个用户发一个,但是数量最优是1024
  POLL()
  信号性IO:调用者向内核注册一IO个信息,以备处理完成后内核的通知,提交后就可以作别的,但是当接收到一个结果后开始阻塞,不能再接收别的参数
  异步IO:调用者发起后,留一个直制定的处理器,举例,你去饭店要了面,老板留了你的联系方式,面好了,老板就你会来吃,你还要自己端会桌子,这叫异步         ,老板给你端上桌才叫你,回来就能吃的叫同步
  真正的多进程用户最少是个信号性IO
  一次IO 请求分成两个阶段
  1.等待数据,以及数据从磁盘到内核内存的过程
  2.复制过程,数据从内核内存到进程内存的过程
  Nginx主要是解决c10k问题10000个客户端并发连接
  事件驱动模型实现
  linux:epoll,
  feature特性:
  web服务器
  web反向代理服务器
  邮件反向代理服务器
  通用的tcp/udp反代服务器(负载均衡的调度效果)最新版支持
  作为web服务器功能的实现LNMP
  反代功能,负载均衡 回话保持
  sendfile
  让静态资源不进入用户空间,直接在内核空间处理外发送给用户
  mmap
  内存映射,将磁盘中的文件数据,映射到用户空间,读取时直接读映射,但是虽然节省了读取时间,却加中了性能消耗
  事件驱动
  异步
  非阻塞
  nginx程序架构
  master/worker
  master进程
  负责加载配置文件,管理worker进程,平滑升级等
  worker进程(可多个)
  处理并响应用户请求
  nginx公用
  静态的web资源服务器
  结合fastcgi/uwsg/scgi等协议反代动态资源请求(lnmt,lnmp)
  http/https反向代理(负载均衡)
  smtp/imap/pop3协议的反向代理
  tcp/udp协议的反代
  负载均衡,容错功能
  高度模块化,模块类型
  1.核心模块:任何协议都会用到的模块core module
  2.标准模块:自带的模块
  Standard HTTP modules
  Optional HTTP modules
  Mail modules
  Stream modules 每个协议都有核心模块xxx core module,也要启动
  3.第三方模块
  静态资源服务器配置
  1.nginx安装
  rpmbuild 创建rpm包
  尽管这里演示的是编译安装,但是工作的时候为了方便分发还是尽量用rpm安装
  groupinstall D Ts   S P D
  pcre-devel zlib-devel openssl-devel
  【pid文件在/var/run】
  【lock文件在/var/run或/var/lock】

  nginx -s stop>  2.配置
  配置的组成部分
  主配置文件:nginx.conf
  include conf.d/*.conf
  fastcgi,uwsgi,scgi的相关配置文件
  mime.types:支持的mime配置
  主配置文件的配置指令
  directive value1 [value2...];空格隔开,分号结尾
  注意:1.必须;结尾但是花括号不需要;
  2.支持使用配置变量
  內建变量
  自定义变量
  set variable_name 值
  引用:$variable_name
  主配置文件结构(花括号叫配置上下文)
  main block:主配置段,全局配置
  event {
  ...
  } :事件驱动相关配置
  http {
  ...
  }:http/https等相关的配置端
  mail{
  ...
  }:邮件配置段
  http配置段的结构
  无论有几个站点服务都要配置虚拟主机,也有FQDN端口IP地址三种
  http {
  ...
  ...
  server {
  server_name
  root
  alias
  location {
  ...
  }:访问控制
  }
  server {
  ...
  }
  ...
  }
  main block常见配置指令
  a.正常运行必备配置指令
  user username [groupname];
  制定运行worker的用户
  pid /path/to/pid_file ;
  守护进程的pid文件路径
  worker_rlimit_nodile_number #;
  单个worker打开的文件的总数量最值
  b.优化性能相关配置
  1.worker_processes number|auto
  worker进程的数量,通常是  用于接收客户端请求报文的body部分的缓冲区大小;默认为16k;超时此大小时,其将被暂存到磁盘上;
  client_body_temp_path path [level1 [level2 [level3]]];
  设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量;
  level1.2.3是数字,表示创建多少个[1|2|3]级子目录
  /var/tmp/body  2表示使用2个16进制字符创建子目录256个2^8
  /var/tmp/body 2 1 2
  使用两个字符创建一级子目录,1个16进制字符创建二级子目录,2个16进制字符创建三集子目录
  d.对客户端的请求进行限制
  1.limit rate rate
  限定速率,每秒相应给客户端的传输速率默认为0无限制,默认单位字节/s
  应用在http server location if上下文
  2.limit_except method(GET,POST等)
  限制客户端请求时使用的方法
  适用于location
  method多个之间用空格隔开
  location dir {
  limit_except method
  allow IP地址
  deny all|IP地址
  }表示对除了allow的网址以外的其余都只允许用method这种方法
  e.文件操作优化配置(不是很关键,了解)
  1.aio on|off|thread[=pool]
  异步传输功能是不是打开
  http server location
  默认是关闭的

  2.directio>  是不是关闭直接io,启用定义多大空间
  3.open_file_cache off;
  open_file_cache max=N【inactive=tme】缓存条目的上限
  打开的文件缓存
  nginx可以缓存以下三种信息
  文件的描述符,文件大小和最近一次的修改时间
  打开的目录的结构
  没有找到的或者没有权限访问的文件的相关信息
  在一定程度上提高性能
  【那么当缓存达到了允许缓存最大条目的上限后,又有要缓存的文件怎么办?采用lru算法,就是说查找最近最少用到缓存,清除,然后将新的放进去】
  inactive=time
  缓存的超时时长,再次制定的时间中没有达到下边的最小访问次数的缓存就被定义成非活动项
  4.open_file_cache_errors on|off
  没有找到的或者没有权限访问的文件的相关信息是否被缓存
  5.open_file_cache_min_users number
  缓存项的最少被访问的次数,在上边定义的非活动期限inactive=time内最少被访问的次数
  6.open_file_cache_valid time
  多长时间检查一次缓存项中的非活动缓存,将其删除,默认是60秒
  f.ngx_http_access_module
  实现基于ip的访问控制
  allow 192.168.1.102/16
  deny 192.168.0.0
  这个跟之前httpd基于ip的访问控制很像,都是从上到下定义,上边的意思就是192.168.0.0这个网段除了192.168.1.102意外都不允许访问
  哪里都能用
  g.ngx_http_auth_basic_module
  基于用户认证的访问控制
  auth_basic string|off
  是不是开启基于用户的访问控制string是说明,有点像httpd的authname
  auth_basic_user_file file
  认证用的账号密码文件路径
  文件格式(明文)
  name:passwd:comment
  密码格式
  1.htpasswd生成
  2.crypt也行,但不如htpasswd,用第一个就好
  h.ngx_http_stub_status_module模块:
  用于输出nginx的基本状态信息
  至关重要 面试要用
  输出nginx基本状态信息
  之后好多内容都是些脚本来从获取里边的内容的
  location /status {
  stub_status;
  }
  active connections 1
  server accepts handed requests
  155 155 298
  reading:0 writing:1 waiting:0
  active connections # 活动客户端连接数
  accepts 接受的客户端连接总数量(第一个155)
  handed 已经处理完成的客户端请求的总数(第二个255)
  requests 请求总数;总数-accepts=没接收的数量
  reading 正在读取客户端请求报文首部的连接数
  writing 正在向客户端发送响应报文过程的连接数
  waiting 启用了保持连接功能后,处于正在等待客户端发出请求的空闲连接数,如果数值很大,可能是keepalive时间太长了
  i.ngx_http_referer_module
  记录跳转的信息,像从哪些连接跳转到我们的网站,或者是盗链的防止,定义那些是合法合理的跳转
  1.valid_referers none | blocked | server_names | string ...;
  定义合法的referer数据;
  server location
  none:请求报文中没有referer首部的,允许
  blocked:请求报文中存在referer,但是没有值,也是允许,合法的
  server_names:值是主机名,凡是来自这个域名的referer都是合法的
  arbitrary string:直接字符串,或者可以用*统配的
  regular expression:~正表,正则表达式模式所描述的字符串
  valid_referers none blocked server_names *.magedu.com magedu.* ~\.magedu\.;
  if ($invalid_referer) {
  return 403;
  }
  $invalid_referer模块自带的变量,值得是没有被valid_referer匹配到的,返回403后去403那边定义返回的网页之类的
  ssl module
  ngx_http_ssl_module 默认不会编译,编译时记得启用
  【ssl/tls
  tls:传输层安全 1.0  1.1 1.2 与ssl版本一一对应
  ssl:v3.1 v3.2 v3.3
  ssl在建立连接的时候,先向服务器hello,服务器收到后返回hello以及自己的证书,然后双方进行秘钥加密算法的交换,完成后建立连接
  断开的时候,要先断开ssl连接,在断开tcp/udp连接】
  nginx -V 安装信息
  # HTTPS server
  #
  #server {
  # ssl on|off (或者在listen后面加ssl,两者取一即可)
  #    listen       443 ssl;
  为了保证443端口一定是ssl监听,要在后边加上ssl
  #    server_name  localhost;
  #    ssl_certificate      cert.pem;
  证书路径(不管后缀名叫什么都是pem格式)
  #    ssl_certificate_key  cert.key;
  私钥路径(与证书匹配的私钥文件)
  # ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
  SSL协议的版本;默认值就好
  #    ssl_session_cache    shared:SSL:1m;
  ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
  两种,一种是每个worker私有builtin,一个是共享shared
  shared共享(建议)
  name 缓存的名称
  1m是缓存大小,1m能缓存4000个sessions
  大大提高性能
  土豪公司会在前端的负载均衡上靠硬件实现ssl
  #    ssl_session_timeout  5m;
  超时时间
  ssl会话超时时长,指ssl session cache中缓存条目有效时长
  时间内一个客户端再次来请求会话,不需要从新验证等
  #    ssl_ciphers  HIGH:!aNULL:!MD5;
  加密方式,!是取消,+是增加的
  #    ssl_prefer_server_ciphers  on;
  是不是有服务端选择加密算法
  客户端把支持的所有算法发过无由服务端选择
  #    location / {
  #        root   html;
  #        index  index.html index.htm;
  #    }
  ngx_http_log_module
  定义访问日志日志格式和日志文件位置,文件描述符缓存也可以定义,错误日志是全局定义的
  log_format name “string”
  httpd中是用的%f等,而nginx中是但前配置文件中自带的或者是用户创建的变量
  编译安装的默认值就行
  access_log off;
  access_log path [format [buffer=size [flush=time]]gzip[=level] [if=condition]];
  open_log_file_cache max=N [inactive=time][min_uses=N] [valid=time]
  日志文件的文件描述符缓存机制
  max=N 最大可以缓存的文件描述符数量
  inactive=time 非活动项,当满了的时候会将最近没达到最少使用次数的删除
  min_uses=N 最小使用次数
  valid=time 多长时间检查一次哪些项失效
  ngx_http_rewrite_module   重要的不行
  url重写
  rewrite ragex正表   replacement[flag]
  将基于前边正则表达式模式进行检查,匹配到的替换成后边的replacement制定的url
  在同一级别的配置块中,存在多个rewrite的时候,会自上而下逐个检查,含有循环机制
  【当nginx替换循环了10次还没结束,nginx会自动结束并报错】
  如果replacement是以http:// https:// 开头,替换结果直接以重定向通知客户端301.302
  [flag]
  客户端不参与:
  last:替换完成后,停止接下来的多有操作,从location的rewrite开始进行新一轮的检查,替换以及后续操作
  break:重写完成后,即可停止对当前location中的rewrite检查,进行其他配置
  客户端参与
  redirect:重写完成后以临时重定向的方式返回重写完成后生成的新的url给客户端,客户端发起新的请求;但是不能以http,https开头
  permanent:重写完成后以永久重定向的方式返回重写完成后生成的新的url给客户端,客户端发起新的请求,必须以http,https开头
  【只要是以http,https开头的就是永久重定向】
  【正则表达式匹配的位置是root后边的,例如
  rewrite ^/bbs /forum
  www.mymy.com/bbs-----www.mymy.com/forum】
  rewrite_log on|off
  适配与notice级别,并记录到error_log中
  return code|code url|url
  停止以及后续的所有处理,并返回给客户端一个响应码,一般在错误的格式下才会使用return或者是用户请求一个不允许的资源的时候使用,用户的请求终止
  if (condition){...}
  引入新的上下文,适用于server和location
  当条件()满足时候,执行{}中的动作
  比较操作符
  ==
  !=
  ~ 区分大小写
  ~*
  !~
  !~*
  文件目录存在判断
  -e
  -f
  -d
  -x 执行权限
  set $variable value
  适用于server location if中
  ngx_http_gzip_module
  压缩,以CPU的计算能力换取带宽
  gzip on|off

  gzip_buffers number>  指明用于压缩功能的buffers的数量和大小
  gzip_comp_level level
  压缩级别,数字越大压缩比越大越消耗CPU
  gzip_disable regex
  被正则表达式匹配到的,不会启用压缩功能
  gzip_min_length #;
  报文的值大与这个值的时候才启用压缩功能
  gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
  对代理的请求所获取的响应报文是不是启用压缩功能,以及如何启用
  off:禁止压缩
  expired:响应报文中包含expired的启用
  any:什么请求都进行压缩
  gzip_types mime_type
  压缩过滤器,只对这个设定的内容进行压缩
  mime_type text/plain text/cdd text/xml...
  一般简单设置直接gzip on|off就可以,想要更加正确在加其他选线
  ngx_http_limit_req_module
  单ip的速率(请求数)限制

  limit_req_zone key(一般是客户端的IP地址) zone=name>  基于区域空间,为了识别每一个独立的个体,要给个key,可以使堵路地址也可以是。。
  ngx_http_fastcgi_module
  LNMP
  nginx+php:fastcgi协议
  nginx:client
  php-fpm:server
  fastcgi_pass address
  指明服务器端地址,php-fpm监听的地址ipv4 ipv6 unix domain
  fastcgi_index name
  默认的fastcgi职业资源
  fastcgi_param parameter value[if not empty]
  /usr/local/html(root)$fastcgi_script_name(用户请求的文件名)
  fastcgi_cache cachename
  调用缓存,能命中的话就会性能提升,所以缓存的命中率是很重要
  【调用缓存时必须要有的三个参数
  ..cache
  ..cache_key
  ..cache_valid】
  【对于所有缓存来说,命中率都是一种药的指标,有两种标准命中需要时间和次数一般命中率30%以上就很好了】
  【缓存结构很简单,一个key(用户的url)一个value(url对应的脚本的执行结果)】
  【缓存是个哈希表,效率十分高,而且nginx还把key放到了内存中,查找更加快捷】
  【内容放在磁盘中,将内容的哈希码做目录名,将内容放进去,然后将哈希码放到key中】
  【分级将哈希码前两位切出来做一级目录名,再切两做二级目录名......】
  fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
  适用于http中
  path:缓存数据存放路径
  levels= 缓存目录层级熟料,以及每一级的目录数量
  levels=1:2:1
  1指使用1位16进制字符,2值使用2位16进制字符,分别是1级目录2级目录3级目录
  keys_zone=name:size 缓存名和缓存key在内存中使用多大空间
  inactive=time 缓存的有效时长
  max_size=size 磁盘上用于缓存数据的缓存空间的最大值
  fastcgi_cache zone|off
  适用于 http server location
  调用指定的缓存空间来缓存数据
  fastcgi_cache_key string
  用作上边定义的缓存空间的key的字符串,一般是用户请求的url,用变量 $request_uri 表示
  fastcgi_cache_key  $request_uri;
  fastcgi_cache_methods GET HEAD POST..
  缓存哪些类型的请求的相关数据;
  fastcgi_cache_min_uses number
  请求几次才放进缓存,1表示有请求就放
  fastcgi_cache_valid[code...]time
  对不同响应码的对应资源的缓存时长
  404 403 301 303 304
  epoll select详细内容记住
  select 是轮训,该模式可操作的socket数量是FD_SETSIZE操作的,内核默认是32*32=1024个,通过遍历1024个socket来完成调度,不论是不是活跃的都要遍历一遍
  epoll 是触发式的,socket同poll一样是无限制的,操作是基于内核提供的反射模式,那个socket是活跃就去访问那个socket,而不需要遍历,但是如果全部的socket都是活跃的,那么性能不如轮训遍历
  nginx load balance负载均衡:(1.10以后)
  对tcp/udp调度
  nginx proxy 反代:
  reverse proxy
  【反代通常指对单一客户端反代,而不是一组,面向多个主机的时候要先通过别的组件(独立的实体)将主机们定义成组,独立实体代为收到反代请求,然后分发给多个主机】
  upstream模块
  对于数据流,lvs是工作在内核空间,对于长数据流,是直接发过去,而不是等发完后一起发过去,因为直接发效率高,并且不直接发的话对于内存的占用大,但是nginx是要完整接受后转发,如果太大就缓存,还是太大就先暂存在磁盘的临时空间,还要注意的是,后端响应回去的,报文是存下来一起发,但是大文件是切割成小报文在发,所以他也要个缓存位置
  截图1.0801 09:28
  为毛启用反代:
  1.前段阻断一些恶意请求
  2.后端与代理服务器可以建立一个长时间的长连接,减少每次建立连接的消耗
  3.代理开启缓存后端更加轻松
  【注意:后端主机接受到的请求都是代理服务器的地址】
  【想要后端有源地址,可以再代理服务器封装请求报文的时候封装进去,然后后端记录一下就好】
  【多级代理的每一级都要额外附加原地址,常用的xforwarded就是初级代理附加,然后后边的代理转发报文就好】
  缓存可以拿出来单独放一个服务器
  反代算法可以基于url来调度具体到那个缓存服务器
  哈希表存, url当键,服务器当地址,没有就按照算法调度,一般是加权轮序wrr
  调度后端服务器,可以分析user agent调度
  版本上线   应用程序发布
  灰度模型:一次只更新一部分主机,一般在凌晨,访问量较小,将一部分的权重该为零,然后停止服务器,添加新应用,重启,改回正常的权重,然后看请求是不是正常进行,正常就依次重启
  问题:
  1.但是如果有回话怎么办
  一般session都是放在server上的
  【http的长连接是不超过10秒的,权重设置为0的等10秒就好了可以下线(冷模式,一定要停掉,反正已经下线了)了,有回话就等回话的最长时间】
  2.发了新版本后发现有bug怎么办
  回滚
  3.如果用户上传文件了怎么办,又不能覆盖
  一般nginx可以将用户上传的文件(静态)单独放到一个目录或服务器来,到时候软连接等就好
  【nginx应用层可以实现动静分离,lvs就不行】
  压缩对动态资源会对缓存服务器造成负担
  proxy模块 upstream模块
  ngx_http_proxy_module
  1.proxy_pass URL
  location,if in location,limit_expect
  【注意pass后面路径不带url(带/)时,其会将location的uri传递给后端主机
  location /uri/ {
  proxy_pass http://HOST;
  }
  http://HOST/uri;
  如果后面的路径是一个uri的时候,会将location的uri替换为proxy_pass的uri
  location /uri/ {
  proxy_pass http://HOST/new_uri/;
  }
  http://HOST/new_uri/uri/a.jpg
  如果location定义uri的时候使用了正则表达式的模式,那么proxy_pass之后必须不能使用uri;否则为语法错误
  location ~|~* PATTERN {
  proxy_pass http://HOST;
  }
  】
  上午第二节课
  $proxy_host 当前代理服务器地址
  2.proxy_set_header name value
  http,server,location
  将请求报文的首部重新定义,后直接添加一个首部,设定某个首部的值,为我们制定的值,然后给后端主机
  默认值 Host $proxy_host
  connection close 关闭长连接
  proxy_set_header X-RealHost $remote_addr
  X-Forward-For $prox_add_x_forwarded_for
  后端服务器(httpd)配置文件的logformat 默认的格式之一里边加上{X-RealHost}i
  3.proxy_cache_path[levels=levels]keys_zone=name:size [inactive=time] [max_size=size] ;
  适用于http
  调用缓存
  proxy_cache zone|off
  适用于http,location,server
  proxy_cache_key string
  $scheme$proxy_host$requests_uri
  proxy_cache_valid [code] time
  4.proxy_cache_use_stale 腐败过期error|timeout|invalid_header|
  是不是能用过期的缓存来给用户
  5.proxy_connect|read|send_timeout
  连接超时时长
  尤其是read,加长这个时间可以避免很多的502
  6.proxy_buffer_size   缓冲,一般是开启的不需要修改
  buffering
  buffers
  ngx_http_headers_module
  1.add_header name value [always]
  向相应报文中添加自定义首部
  可用上下文:http,server,location,if in location
  add_header  X-Via  $server_addr;
  X-accel $server_name
  2.expires [modified] time
  epoch|max|of
  ngx_http_upstream_module 负载均衡调度模块
  将多个后端服务器定义成组,然后提供负载均衡,分发等功能,对于proxy还是一个后端服务器,不只是proxy,fastcgi也行
  upstream name组名{
  server backend1.mymy.com weight权重
  server IP地址:端口 max_fails=3 fail_timeout weight权重
  【server address[parameters]】
  server unix:/path/to/sock_file
  server backend1.mymy.com weight权重
  }
  只能用在http
  server 参数
  weight=#
  默认为1
  max_fails=#
  最大失败尝试次数
  fail_timeout=#
  这个时间中可以尝试max_fails次数
  backup
  备用标记,所有主服务器不可用的时候才会使用
  down
  手动标记服务器为不可用
  least_conn;
  upstream
  最少链接算法,当服务器拥有不同权重的时候,使用wlc算法,不写时默认的加权轮序wrr,考虑权重
  least_time header|last_byte
  最少平均响应时间,和最少连接
  header 只记录接受响应报文首部的时长
  last_byte 报文全部接受完后响应时间
  仅对nginx企业版有效
  ip hash
  原地址哈希算法SH,来自同一个源IP地址的请求始终发往同一个后端服务器
  hash key[consistent]
  key $requests_uri等对同一uri都送到同一服务器
  $remote_addr
  $cookie_name
  常用于缓存服务器,缓存服务器必须用一致性哈希算法并且对uri做哈希计算
  【对后面分布式算法至关重要】
  调度基于hash 的key来调度,key可是文本,变量或二者组合
  consistent:参数,指定使用一致性哈希算法
  【正常哈希算法:把key做哈希计算,然后对key基于服务器总权重取余,余数是几就放第几泰服务器】
  但是增删服务器,总权重变了,哈希计算就全部不同了,于是有了一致性哈希算法
  【一致性哈希算法:一个哈希环,分为0到2^32-1个节点,将服务器放在节点上,然后对2^32取余,落在环上后,做顺时针旋转,找离他最近的服务器,影响范围小,但是容易造成环偏斜,有的环可能承载的请求太多,可以做虚拟节点,一个服务器做多个虚拟节点】
  sticky cookie name后边默认就行,基于cookie绑定
  keepalive connection
  (设定可以一直处在保持连接状态的数量)
  keepalive #;
  nginx主机与后端代理服务器启用保持连接功能
  大大减少连接创建删除时间和套接字使用数量
  health_check
  定义健康状态检测机制
  只能用于location,也就是说只能定义在proxy_pass后边
  interval=time
  检测频率,默认5秒1一次
  fails=number
  检测失败的次数,第一次检测成失败不马上处理,默认为1但是不要设为1
  passes=number
  默认为1,服务器从失败转为成功是需要检测的次数
  uri=uri
  判断健康与否使用的uri
  match=name
  基于制定的match来衡量检测结果的成败,match是额外定义的出来的,这里应用定义的match的名字就好
  port=number
  使用独立的端口专门进行健康状态检测
  仅对nginx企业版有效
  match name{..}
  只能用在http,衡量检测结果是不是成功的方法
  status code|!dode
  header HEADER=VALUE
  HEADER~VALUE
  body ~|!~ “PATTERN"
  下午第一节课
  博客作业:讲到的所有nginx内容
  课外实践作业:实践tengine
  ngx_stream_core_module
  stream{
  upstream sshsvrs {
  server 192.168.10.130:22;
  server 192.168.10.131:22
  hash $remote_addr consistent;
  }
  server{
  listen 172.16.100.6:22202;
  proxy_pass sshsvrs
  }
  }
  代理后端的ssh服务
  1.listen后边要指明要监听的端口,如果协议有区别要指明是tcp或udp协议等,默认是tcp
  下午第二节课


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-635394-1-1.html 上篇帖子: Nginx安装lua支持 下篇帖子: 搭建 nginx+django+uwsgi-Linux一万小时
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表