美文网首页
Nginx-基本配置(三)

Nginx-基本配置(三)

作者: 东风依旧788 | 来源:发表于2018-05-21 15:33 被阅读0次

    原客户端信息保留

    • 客户端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多播的方式进行通信,当发现主路由故障,通过选举的策略将备用路由更换为主路由,从而继续提供服务

    相关文章

      网友评论

          本文标题:Nginx-基本配置(三)

          本文链接:https://www.haomeiwen.com/subject/ancidftx.html