Skip to content

总结

配置结构

  • 全局块
    • 指定运行的用户;
    • worker进程的数量 worker_processes auto;
    • 日式格式 error_log logs/error.log notice;
  • event块
    • 客户端和服务端之间网络连接的一些配置,例如
    • worker_connections 1024;
    • 网络IO模型;
  • http块(主要修改的地方)
    • 虚拟主机(也叫server块)
      • 可以包含多个,每个域名匹配一个server块;
      • 也可以include servers/*来包含多个;
      • 用location来配置域名对应的路径,"/"是匹配根目录;
        • 如果uri包含正则表达式,则必须要有“~或者~*”标识
        • 四种通配符的匹配
          • = 是严格匹配,具有最高的优先级,其次是正则表达式匹配;
          • ~ 是包含正则表达式区分大小写;
          • ~* 是包含正则表达式不区分大小写;
          • ^~ 不含正则表达式,找到第一个请求字符串匹配度最高的location;
        • 例如:location ~ /edu/ {}
        • 每个location设置一个root /data/,也可以设置一个全局默认的;
        • 静态资源分为html和图片、css、js等资源,配置这些的过期时间expires 3d;
    • 反向代理
      • proxy_pass在location中使用;
      • upstream servername {server ip:port;}
      • upstream写在http块里面;
    • 负载均衡
      • 4种分配策略
        • 默认是轮询
        • 权重weight越高,被分配的几率越高,一般给性能好的服务权重配高,每个后端服务地址后面配置一个weight=n;
        • 按请求的ip哈希,每个客户端固定一个后端服务器,和后端服务地址同一层,只需配置一个ip_hash;
        • 按后端服务的响应时间来分配,响应快的优先,只需配置一个fair;

问题

nginx原理

  • 优点:

    • 占内存少,并发能力强;
    • nginx和redis类似,都是采用io多路复用机制;
    • master->worker的进程工作模型,每个worker都是一个独立的进程,每个进程里只有一个主线程,采用异步非阻塞的方式来处理请求;
    • 每个worker的一个线程可以把一个cpu的性能发挥极致,worker的数量和cpu数量相等最合适,auto就行;
  • 启动流程

    • 解析命令行中的参数
    • 初始化日志,初始化全局变量
    • 创建多个子进程,进行进程循环
    • 事件处理,延迟队列,设置事件回调;