Nginx-基本配置(三)

原客户端信息保留

  • 客户端IP保留
      location ~\.html {
            proxy_set_header Host $host;
            proxy_set_header X-Client-IP $remote_addr;
      }
    
    • 说明
      1. remote_addr 变量保存了客户端的IP地址
  • 跨域访问header信息增加
         if ($request_method = OPTIONS) {
              add_header 'Access-Control-Allow-Origin' "$http_origin";
              add_header 'Access-Control-Allow-Credentials' 'true';
              add_header 'Access-Control-Max-Age' 1728000;
              add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, HEAD, DELETE,TRACE,PUT,CONNECT';
              add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since,restrict-access,sha    re-secret,thumbnail';
             return 200;
          }
    

配置反向代理服务器

  • 使用proxy_pass指定服务器地址
  • proxy_set_header 变更请求客户端的请求头信息
  • proxy_connect_timeout 配置Nginx与后台服务器建立连接的超时时间
  • proxy_read_timeout Nginx向后端发送read请求后,等待响应超时时间
  • prosy_send_timeout Nginx向后端发送write请求后,等待响应超时时间
  • proxy_redirect 用于修改后端服务器返回头的Location和Refresh

负载均衡:通过upstream指令来实现

轮询方式 :默认方式,每个请求按照时间顺序逐一分配到不同的服务器进行处理,如果服务器宕机,会自动删除
  • 配置样例
    upstream my_app {
        server 192.168.1.1;
        server 192.168.1.2;
    }
    http {
      server {
          listen 80;
          server_name test,org.com;
          location / {
              proxy_pass http://my_app;
          }
       }
    }
    
权重方式: 利用weight指定轮询权重比率,用于后端服务器性能不一致情形
  • 针对于服务器性能有所差异的情形
  • 通过weight参数配置权重,权重越大被分配的概率就越大
    upstream my_app {
        server 192.168.1.1 weight=1;
        server 192.168.1.2 weight=3;
    }
    
  • 其他参数
    • max_fails 允许请求的失败次数,默认值是1,超过错误次数时,返回proxy_next_upstream 指令定义错误
    • fail_timeout 经历max_fails次数之后,暂停服务的时间,与max_fails一起使用
    • backup 预留的备份机器,当且仅当其他非backup机器出现故障或者忙碌情况下使用
    • down 表示当前机器暂时不参与负载均衡
ip_hash方式:每个请求按照访问IP的hash结果进行分配,可以将每个访客固定到固定的服务器,可以解决Session共享问题
  • 配置方式
        upstream my_app {
         ip_hash;
        server 192.168.1.1;
        server 192.168.1.2;
        server 192.168.1.3 down;
    }
    
  • 此模式下不能使用weight和backup进行设置
  • 这种模式并不能保证负载均衡,可能会导致某台服务器压力比较大,所以使用不是很多
第三方模块:第三方模块采用fair时,按照每台服务器的响应时间来分配请求,时间短的优先分配;如果第三方模块采用url_hash时,访问采用url的hash值进行分配
  • Nginx本身不包含第三方模块,使用时需要先安装响应的模块软件包

缓存配置

永久性缓存
  • 用proxy_store指令可以用于将内容源服务器响应的内容缓存到本地,如果不手动删除,该缓存将一直生效
  • 配置
      server {
          location / {
              root cache; #缓存文件目录nginx的cache目录,需要手动创建,创建后修改权限到worker进程所属于的用户组
              proxy_store on;
              proxy_strore_access user:rw group:rw all:r;
              proxy_temp_patch cache_tmp;#设置反向代理时接收数据临时存储目录,该目录可以由nginx自动创建
              proxy_pass http://www.test.com;
          }
      }
    
临时性缓存
  • 使用proxy_cache指令设置临时缓存配置,采用md5算法将请求连接进行hash后,根据具体配置生成缓存目录文件,用于保存响应数据
  • 配置
      http {
        #  代理临时目录
        proxy_temp_path /usr/local/etc/nginx/proxy_temp;
        # Web 缓存目录和参数设置
        proxy_cache_path /usr/local/etc/nginx/proxy_cache levels=1:2 keys_zone=cache_on:50m;
        inactive=1m max_size=500m;
      }
    
    1. levels 表示缓存目录下的层级目录结构,表示每一层目录名称的长度
    2. keys_zone 指定缓存名称以及大小
    3. inactive 表示主动清空在指定时间内没有被访问的缓存
    4. max_size 表示指定磁盘空间大小

Nginx配置优化

连接数优化
  • worker_process auto 用于指定工作进程个数,设置为auto时,Nginx根据CPU的核心数来控制
  • worker_rlimit_nofile 用来配置最多打开文件数量
  • worker_connections 用来设置每个worker可接受的连接数
  • multi_accept 表示是否允许一个工作进程响应多个请求
客户端请求限制
  • limit_conn 指定用来限制并发数
    http {
        # 开辟一个10m的名称为perpie的内存空间用来保存客户端ip
        # $binary_remote_addr 客户端IP地址二进制
        limit_conn_zone $binary_remote_addr zone=perpie:10m;
        # 并发连接数量限制,当并发数量超过10时,返回503-服务不可用
        limit_conn perip 10;
     }
    
  • 限制虚拟主机的并发数量
      http {
           limit_conn_zone $server_name zone=perserver:10m;
           server {
                 server_name localhost;
                 # 限制localhost的并发数量
                 limit_conn perserver 10;
           }
       }
    
  • 限制响应的传输速率
  http {
     # 限定每个连接的传输速率是100k
     limit_rate 100k;
    # 用于在已经传输指定大小的数据后再进行限速,针对大文件下载,当省略时,无论文件大小是多少,都会进行限制
     limit_rate_after 10m;
  }
浏览器缓存优化
  • 服务器可以通过响应消息控制浏览器缓存和缓存相关的响应头信息
    • Last-Modified 最后的修改时间,由Nginx生成
    • ETag 由于浏览器判断内容是否有改变,由Nginx生成
    • Expires 表示资源过期时间,当没有过期时,浏览器不会发出HTTP请求
  • 静态资源的优化
  server {
      location ~.\(gif|jpg|jpeg|png|bmp|swf)$ {
          expires 30d;
     }
     location ~\.(css|js)$ {
          expires 12h;
     }
  }

LNMP分布式集群

集群部署样例
  • 一台负载均衡服务器接入互联网,其工作主要承担网络吞吐压力
  • 后端的服务器负责业务相关工作,每一台都可以单独完成工作,实例的增加是为了提高系统承载能力
  • 需要一台备用的服务器,检测负载均衡服务器,当服在均衡服务器出现故障时,启动备用服务器进行切换以达到高可用性


    1526886377411.jpg
分布式集群
  • 分布式的目的是将业务有效的拆分,多个服务进行协作来完成一项业务
  • 示例
    • 针对热点服务进行扩展,通过发现瓶颈来提高系统吞吐量


      1526886918122.jpg

与Keepalived相结合的高可用性

  • 高可用性 通过专门的架构设计,以减少整个系统的故障时间,保持其提供服务的高可用性
  • Keepalived 内置了VRRP(虚拟路由冗余协议)功能,用于解决静态路由出现的单点故障的问题,通过IP多播的方式进行通信,当发现主路由故障,通过选举的策略将备用路由更换为主路由,从而继续提供服务
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 一、安装Nginx: 1、解决依赖关系 yum groupinstall "Development Tools" ...
    不排版阅读 837评论 0 0
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 1,980评论 0 9
  • 1.简介:  Nginx:engine X ,2002年,开源,商业版 http协议:web服务器(类似于ht...
    尛尛大尹阅读 1,854评论 0 3
  • 和苜蓿有关的记忆 对于出生农村的我来说,苜蓿并不陌生,每年春暖乍寒之际,它便第一个供出...
    睁着眼睛的懒兔儿阅读 696评论 6 5