Nginx笔记

 Nginx:反向代理服务器,反向代理,负载均衡,支持高并发,
缺点:只能用于静态页面,不能编译java代码,如用jsp需要请求Tomcat,和Tomcat关联。
Nginx客户端不去请求真正的服务器,而是请求Nginx服务器并代理请求,通过一定概率保定均匀的分发给服务器。
Nginx依赖于底层的Liunx系统.
Nginx默认端口是80
Nginx的开发学习模块
配置Nginx集群
vi /etc/nginx/nginx.conf
upstream 集群名称:tomcat{
    server 192.168.21.140:8080 权重:weight=1;     
    server 192.168.21.144:8080 权重:weight=3;
}
nginx - tc /etc/nginx/nginx.conf 测试是否成功
/etc/nginx/conf.d/default.conf->proxy_pass http://tomcat要代理的路径
cd default.conf
nginx -s reload -c /etc/nginx/nginx.conf 重新加载nginx服务器

shutdown.sh停止服务器

Nginx使用原因
原因一.IO多路复用
 什么是IO多路复用?
  多个描述符的IO操作都能在一个线程内并发交替地顺序完成,这就是IO多路复用,这里的“复用”指的     是 复用同一个线程。
 IO多路复用的实现方式select poll epoll。
  select不断遍历效率低下有限制。
  epoll效率比select高没有限制。

原因二.轻量级
 功能模块少:只保留了核心模块的代码
 代码模块化:易读,二次改进

原因三.CPU亲和(affinity)
 是一种把CPU核心的Nginx工作进程绑定方式,把每个worker进程固定在一个CPU上执行,
 减少切换CPU的cache miss,获得更好的性能。

原因四:采用sendfile
 sendfile处理静态文件有优势
 把所有的文件传输指通过内核空间传递给Socket响应给用户

一.Nginx快速搭建与基本参数使用
    Mainline version 开发版
    Stable version 稳定版
    Legacy version 历史版本

    Nginx的安装步骤:
    复制yum源
    ls
    vim /etc/yum
    vim /etc/yum.repos.d/
    vim /etc/yum.repos.d/nginx.repo
    把替换掉之前的
    修改centos/7版本
    保存
    yum list |grep nginx 显示一下
    yum install nginx 快速安装
    ng
    nginx -v 查看版本
    nginx -V 查看参数
--------------------------------
二.基本参数使用
 1.安装目录
    rpm -q| nginx 安装目录
    rpm -ql nginx 登录服务器

    /etc/logrotate.d/nginx 日志切割
    /etc/nginx/nginx.conf 主要配置文件,启动会读
    /etc/nginx/conf.d/default.conf 安装会默认server加载的配置
    /etc/nginx/fastcgi_params 
    /etc/nginx/uwsgi_params cig和fastcgi相关配置
    /etc/nginx/scgi_params
    /etc/nginx/mime.types 

    Nginx安装模块
    /usr/lib64/nginx/modules 
    /etc/nginx/modules

    Nginx的命令
    /usr/sbin/nginx 服务启动和关闭
    /usr/sbin/nginx-debug 调试分析
    /usr/share/man/man8/nginx.8.gz 帮助文档

    /var/cache/nginx Nginx的缓存目录,Nginx除了做http代理服务,也可以做缓存服务!!!
    /var/log/nginx Nginx的日志目录

 2.安装编译参数
    
 3.Nginx基本配置语法

 vi nginx.conf Nginx主目录
 cd /etc/nginx/conf.d/
 vi default.conf
 一个server可以有多个location
 location / {
  root /usr/share/nginx/html; 请求的路径
  index index.html index.htm; 默认访问的页面
 }
 systemctl restart nginx.service
 systemctl reload nginx.service重启Nginx服务

 1.HTTP请求
  curl http://www.imooc.com
  curl -v http://www.imooc.com > /dev/null 查看被隐藏request和response的内容
 2.Nginx日志类型
  包括:error.log access_log
  依赖于log_format的配置,log_format有一些变量组成
  /etc/nginx/nginx.conf
  tail -f /var/log/nginx/error.lof 
  tail -n 200 /var/log/nginx/access.log
 3.Nginx变量
  HTTP请求变量 arg_PAREMETER,http_HEADER,sent_http_HEADER
  内置变量 Nginx内置的如:$remote_addr
...等

  自定义变量 
 4.Nginx模块
  官方模块:
    Nginx的客户端状态模块, 如:location /mystatus {
                         stub_status;
                      }
    目录中选中一个随机页面:location /{
                  root /opt/app/code;
                random_index on;
                #index index.html index.htm;    
                 }
    HTTP内容替换如:location / {
               root /opt/app/code;
               index index.html index.htm;
               sub_filter'<a>imooc'要替换的 '<a>IMOOC'替换后的;
                           sub_filter_once off;替换所有叫imooc
            }

    注在/etc/nginx/conf.d/default.conf配置!
    保存
    模块配置完后检查语法是否正确:nginx -t -c /etc/nginx/nginx.conf
    重新加载:nginx -s reload -c /etc/nginx/nginx.conf
    ip a/ifconfig 查看ip地址,复制到浏览器 如116.65.103.228//mystatus。
  第三方模块

  5.Nginx的请求限制
   TCP连接在http请求之上,通过FIN和ACK保持连接的状态。
   HTTP请求建立在一次TCP连接基础上。
   一次TCP请求至少产生一次HTTP请求。
   连接频率限制
     语法: Syntax:limit_conn_zone key zone=name:size;
        Default:-
        Context:http
    
        Syntax:limit_conn zone number;
        Default:-
        Context:http,server,location
   请求频率限制        
     语法: Syntax:limit_req_zone key zone=name:size rate=rate;
            Default:-
           Context:http

        Syntax:limit_req zone=name [burst=number][nodelay];
        Default:-
        Context:http,server,location
   模块配置完后检查语法是否正确:nginx -t -c /etc/nginx/nginx.conf
   重新加载:nginx -s reload -c /etc/nginx/nginx.conf
   压力测试工具测试请求和连接:ab -n 40 -c 20 http://本地ip地址/1.html
   注:在default.conf里写,上面的key写的是$binary_remtoe_addr:表示客户端的地址,

  6.Nginx的访问控制
    ip138查询自己的公网ip
    1.IP的访问控制:http_access_module
      语法:location ~ ^/admin.html{
           root /opt/app/code;
           allow 222.128.189.0/24; 只允许该id访问  /24是ip段
             deny all;           不允许所有
           index  index.html index.htm;
            }
      http_access_module局限性解决方式:
       1.geo模块,2.通过HTTP自定义变量传递,3.http_x_forward_for,该方式客户端可以改写,不安全
        
    2.用户的信任登录: http_auth_basic_module
        rpm -qf /usr/bin/htpasswd
     yum install httpd-tools -y
     htpasswd -c ./auth_mod^C
    cd ..
    htpasswd -c ./auth_conf jeson
    cd conf.d/
      vi /auth_mod.conf
    location /admin.html{
         root /opt/app/code;
         auth_basic "Auth access test!";
         auth_basic_user_file /etc/nginx/auth_conf;
         index  inex.html index.htm;
    }
    模块配置完后检查语法是否正确:nginx -t -c /etc/nginx/nginx.conf
        重新加载:nginx -s reload -c /etc/nginx/nginx.conf
    这时访问页面!!!
    
      http_auth_basic_module局限性解决方式:
      1.Nginx结合LUA实现高效验证
      2.Nginx和LDAP打通,利用nginx-auth-ldap模块
  
进阶学习
  一.静态资源WEB服务
     简单可分两类静态请求和动态请求:
         1.服务端动态请求需要经过服务端的解释器进行一些比较复杂的逻辑运算,然后那对应的数据进行指示性的封装,返回给用户
         2.静态请求恰恰相反,像一些TXT文件,FLV/MPEG视频,PNG/GIF图片,HTML/CSS/JS浏览器端渲染,都是静态资源
     静态资源服务场景CDN:传输延迟最小化,分发网络技术
    3.文件读取
      Syntax:sendfile on|off;
      Default:sendfile off;
      Context:http,server,location,if in location
       引读:-with-file-aio异步文件读取
    4.配置语法-tcp_noputh
      Syntax:tcp_nopush no|off;
      Default:tcp_nopush off;
      Context:http,server,location
      作用:sendfile开启的情况下,提高网络包的传输效率
    5.配置语法-tcp_nodelay
      Syntax:tcp_nodelay no|off;
      Default:tcp_nodelay no;
      Context:http,server,location
      作用:keepalive连接下,提高网络包的传输实时性
    6.配置语法-压缩
      Syntax:gzip on|off;
      Default:gzip off;
      Context:http,server,location,if in location
      作用:压缩传输
          Syntax:gzip_comp_level level;
      Default:gzip_comp_level 1;
      Context:http,server,location
      作用:压缩比例 
    7.扩展Nginx压缩模块
      http_gzip_static_module-预读gzip功能
      http_gunzip_module-应该支持gunzip的压缩方式
    
    在vi /etc/nginx/conf.d/static_server.conf下配置压缩语法
         
      浏览器缓存
     HTTP协议定义的缓存机制 如:Expires;Cache-controll等
     效验过期机制 从Cache-control(max-age)里检查声明周期是否到期

    客户端添加Cache-Control,Expires验证是否过期语法:
      Syntax:expires [modified] time;
          expires epoch | max | off;
      Default:expires off;
      Context:http,server,location,if in location
          注:Cache-Control是浏览器返回的。
    
     跨域访问
    浏览器默认禁止跨域访问
    配置语法:
      Syntax:add_header name value [always];
      Default:-;
      Context:http,server,location,if location
    注:浏览器会判断头信息HTTPResponse里边Access-Control-Allow-Origirn,判断服务端是否允许访问
    实际写法如:add_header Access-Control-Allow-Origin http://www.jesonc.com  或加*意思允许所有站点访问;
           add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;   
       把浏览器中Disable cache选中,作用清理客户端浏览器缓存,以防缓存影响开发和调试。
    #号作用注释,
     防盗链
    目的:防止资源被盗用。
    区别哪些请求是非正常的用户请求
    http_refer防盗链配置模块:
    location / {
       valid_referers none blocked 116.62.103.228;注:也可以使用匹配的写法如:~/google\./;
       依次意思:允许哪些refer访问,表示那些没有带refer,refer不是标准的http://协议这种方式进来的,表示要访问的ip
          if($invalid_referer){//判断是否为1,如是1 返回403
                    return 403;
            }
    }
    curl -I http://116.62.103.228/wei.png作用:通过命令请求头信息
    curl -I "http://www.baidu.com" -I http://116.62.103.228/wei.png:像访问百度的有设防盗链会返回403
  二.代理服务
    Http                Http server
    ICMP/POP/IMAP    ->Nginx->   Mail server
    HTTPS                Http server
    RTMp                media server
    区别在于代理的对象不一样
    正向代理代理的对象是客户端
    反向代理代理的对象是服务端
    配置语法:
      Syntax:proxy_pass URL;
      Default:-;
      Context:http,server,location,limit_except
      所支持的协议:
      http://localhost:8080/uri/
      https://192.168.1.1:8080/uri/
      http://unix:/tmp/backend.socket:/uri/;
    反向代理使用方式
      proxy_pass http://127.0.0.1:8080;
    查看本机因为Nginx所启用的端口:netstat -luntp|grep nginx
    正向代理使用方式
      location / {
         if($http_x_forwarded_for !~* "^116\.62\.103\.228"){
            return 403;
          }
      }
    缓冲区语法:
      Syntax:proxy_buffering no | off;
      Default:proxy_buffering on;
      Context:http,server,location;
      扩展:proxy_buffer_size,proxy_buffers,proxy_busy_buffers_size
      减少了io的损耗
    跳转重定向语法:
      Syntax:proxy_redirect default;
      proxy_redirect off; proxy_redirect redirect replacement;
      Default:proxy_redirect default;
      Context:http,server,location;
    头信息语法:
      Syntax:proxy_set_header field value;
      Default:proxy_set_header Host $proxy_host;
      Context:http,server,location;
      扩展:proxy_hide_header,proxy_set_body
    超时语法:
      Syntax:proxy_connect_timeout time;
      Default:proxy_connect_timeout 60s;
      Context:http,server,location;
      Nginx作为代理到后端服务器中间的一个连接超时
    nginx -V查看缓冲区临时文件存放位置

  三.负载均衡调度器SLB
    GSLB全局性负载均衡
    SLB局部负载均衡
    Nginx就是典型的七层负载均衡SLB
    分为四层负载均衡和七层负载均衡
      四层负载均衡:性能块,只需要底层进行应用处理,进行包转发。
      七层负载均衡:应用层,http信息的改写,
    配置语法:
      Syntax: upstream name{}
      Default:-
      Context:http
    upstream举例
      upstream 集群名称:tomcat{
            server 192.168.21.140:8080 权重:weight=1;     
             server 192.168.21.144:8080 权重:weight=3;
      }
      记得在哪有引用这个集群名称
    后端服务器在负载均衡调度中的状态
      down        ->    当前的server暂时不参与负载均衡
      backup    ->    预留的备份服务器
      max_fails    ->    允许请求失败的次数
      fail_timeout    ->    经过max_fails失败后
      max_conns    ->    限制最大的接收的连接
    关闭端口号:iptables -I INPUT -p tcp --dport 8003 -j DROP

        调度算法
      论询        ->    按时间顺序逐一分派到不同的后端服务器
      加权轮询    ->    weight值越大,分配到的访问几率越高
      ip_hash    ->    每个请求按访问ip的hash结果分配,这样来自同一个ip固定访问一个后端服务器
      least_conn    ->    最少链接数,那个机器连接数少就分发 注:这个和加权轮询差不多
      url_hash    ->    按照访问的url的hash结果来分配请求,是每个url定向到同一个后端服务器
      hash关键数值    ->    hash自定义的key
      url_hash:
        Syntax:hash key [consistent];
        Default:-
        Context:upstream
        This directive appeared in version 1.7.2.
        编写实例:hash $request_uri;

  四.动态缓存
     proxy_cache配置语法:
        Syntax:proxy_cache_path path [levels=levels]
        [use_temp_path=on|off] keys_zone=name:size [inactive=time]
        [max_size=size] [manager_files=number] [manager_sleep=time]
        [manager_threshold=time] [loader_files=number]
        [loader_sleep=time] [loader_threshold=time] [purger=on|off]
        [purger_files=number] [purger_sleep=time]
        [purger_threshold=time];
        Default:-
        Context:http
          
        Syntax:proxy_cache zone | off;
        Default:proxy_cache off;
        Context:http,server,location
     缓存过期周期配置
        Syntax:proxy_cache_valid [code ...] time;
        Default:-
        Context:http,server,location
     缓存的维度配置
        Syntax:proxy_cache_key string;
        Dafault:proxy_cache_key $scheme$proxy_host$request_uri;
        Context:http,server,location
     如何清理指定缓存?
        1.rm -rf缓存目录内容
        2.第三方扩展模块ngx_cache_purge指定缓存
     如何让部分页面不缓存?
        if($request_uri ~ ^/(url3|login|register|password\/reset)){
          set $cookie_nocache 1;
          }
        Syntax:proxy_no_cache string ...;
        Default:-
        Context:http,server,location
     大文件分片请求
        Syntax:slice size;
        Default:slice 0;
        Context:http,server,location
        前端请求过来通过分片
        优势:
        每个子请求收到的数据都会形成一个独立文件,一个请求断了,其它请求不受影响。
        缺点:
        当文件很大或slice很小的时候,可能会导致文件描述符耗尽等情况。

深度学习
  一.动静分离    
     通过中间件将动态请求和静态请求分离。
    对服务端而言减少不必要请求的消耗,不需要经过后端cup进行逻辑运算
    对客户端而言不用经过后端,从而减少请求的延时
     Nginx的rewrite规则
    实现url重新以及重定向
    URL访问跳转,支持开发设计
    SEO优化
    维护:后台维护,流量转发等。
    安全。
     配置语法:
    Syntax:rewrite regex replacement[flag];
    Defaule:-
    Context:server,location,if
    rewrite ^(.*)$ /pages/maintain.html break;
     正则表达式
    .    ->    匹配除换行符以外的任意字符
    ?    ->    重复0次或1次
    +    ->    重复1次或更多次
    *    ->    最少链接数,那个机器连接数少就分发
    /d    ->    匹配数字
         ^    ->    匹配字符串的开始
    $    ->    匹配字符串的介绍
    {n}    ->    重复n次
    {n,}    ->    重复n次或更多次
    [c]    ->    匹配单个字符c
    [a-z]    ->    匹配a-z小写字母的任意一个
    \    ->    转义字符
    rewrite index\.jsp$ /pages/maintain.html break;
         ()    ->    匹配括号之间的内容
      flag标记:
    last     ->    停止rewrite检测
    break     ->    停止rewrite检测
    redirect ->    返回302临时重定向,地址栏会显示跳转后的地址
    permanent->    返回301永久重定向,地址栏会显示跳转后的地址
    实际写法:
        location ~ ^/break{
            rewrite ^/break /test /break;  注:break找不到并不会新建请求
        }
        location ~ ^/last{
            rewrite ^/last /test /last;    注:last找不到test,会新建请求
        }
        location ~ ^/imooc{
            rewrite ^/imooc http://www.imooc.com/ permanent;
            #rewrite ^/imooc http://www.imooc.com/ redirect;
        }

        rewrite ^/course-(\d+)-(\d+)-(\d+)\.html$ /course/$1/&2/course_$3/html break;
              if($http_user_agent ~* Chrome){
             rewrite ^/nginx http://coding.imooc.com/class/121.html redirect;
        }
        if(!-f $request_filename){ !-f判断文件不存在
             rewrite ^/(.*)$ http://www.baidu.com/$1 redirect;
        }
     rewrite优先级规则
        执行server块的rewrite指令
        执行location匹配
        执行选定的location中的rewrite
     rewrite优雅的书写规则

  二.Nginx高级模块
       1.secure_link_module安全连接模块 语法:
      Syntax:secure_link expression;
      Default:-
      Context:http,server,location
     
      Syntax:secure_link_md5 expression;
      Default:-
      Context:http,server,location            
        作用:应用场景访问限制,防盗链。
       2.geoip_module模块
      yum install nginx-module-geoip
      geoip_country /etc/nginx/geoip/GeoIP.dat;
      geoip_city /etc/nginx/geoip/GeoLiteCity.dat;
      location /myip{
        default_type text/plain;
        return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city";
      }
      作用ip地址匹配MaxMind GeoIP二进制文件,读取IP所以在地域信息。
      区别,国内外,国内城市,地域作HTTP访问规则
        
       为什么需要HTTPS?
      HTTP不安全,传输数据被中间人盗用信息泄露,数据内容劫持篡改。
      HTTPS对传输内容进行加密及身份验证
      对称加密特点是:加密密钥和解密密钥是一样的 一串密钥。
      非对称加密特点是:加密密钥和解密密钥是不一样的 两串密钥。

      生产密钥和CA证书
        必须安装好#openss|version来生成密钥,
        通过密钥生成'证书签名请求文件csr',密钥和csr一并打包以及发送对应的签名机构,CA证书签名,
        步骤一.生成key密钥
        步骤二.生成证书签名请求文件(csr文件)
        步骤三.生成证书签名文件(CA文件)
        实际操作如下:
         rpm -qa|grep open
        mkdir ssl_key
        openssl genrsa -idea -out jesonc.key 1024
        openssl req -new -key jesonc.key -out jesonc.csr 生成证书签名请求文件,注意:这是自己签名的
            openssl x509 -req -days 3650 -in jesonc.csr -signkey jesonc.key -out jesonc.crt
  
  二.Nginx与Lua开发
    Lua:是一个简洁,轻量,可扩展的脚本语言
        Nginx结合Lua优势
    充分的结合Nginx的并发处理epoll优势和Lua的轻量
    实现简单的功能,提高高并发的场景

    Lua基础语法
      1.安装lua:yum install lua
      2.运行:交互式运行和脚本文件方式运行
      3.注释:--行注释,--[[块注释]]
      4.变量:a='alo\n123"' a="alo\n123"" a='\97lo\10\04923"' a=[[alo123]]
        布尔类型只有nil和false是false,0和空字符串是true
      5.while循环语句
          sum=0
        num=1
        while num <=100 do
          sum = sum+num
          num = num+1
        end
        print("sum=",sum)
         注:Lua没有++或者+=这样的操作
      6.for循环语法
        sum = 0;
        for i=1,100 do
          sum = sum+i
        end
      7.if-else判断语句
        if age == 40 and sex == "Male" then
           print("大于40男人")
        elseif age > 60 and sex ~= "Female" then
           print("非女人而且大于60");
        else
           local age = io.read()
           print("Your age is "..age)
        end
        注:~=是不等于,..是字符串的拼接操作符,io库的分别从stdin和stdout读写的read和write函数
        
    Nginx+Lua环境
      1.LuaJIT
      2.ngx_devel_kit和lua-nginx-module
      3.重新编译Nginx
      http://www.imooc.com/article/19598:老师写的参考笔记
      
      Nginx调用lua模块指令
        Nginx的可插拔模块化加载执行,共11个处理阶段
        set_by_lua        ->    设置nginx变量,可以实现复杂的逻辑处理
        set_by_lua_file
        access_by_lua    ->    请求访问阶段处理,用于访问控制
        access_by_lua_file
        content_by_lua    ->    内容处理器,接受请求处理,并输出响应
        content_by_lua_file
      Nginx Lua API
        ngx.var        ->    nginx变量
        ngx.req.get_headers    ->    获取请求头
        ngx.req.get_uri_args->    获取url请求参数
        ngx.redirect    ->    重定向
        ngx.print        ->    输出响应内容体
        ngx.say        ->    通ngx.print,但是会最后输出一个换行符
        ngx.header        ->    输出响应头

    Nginx接口Lua实现代码的灰度发布
       按照一定关系区别,分部分的代码进行上线,使代码的发布能平滑过渡上线。
       场景:1.用户的信息cookie等信息区别
            2.根据用户的ip地址
        3.效验IP Memcache
       实战:1.yum install memcached 和 tomcat
        2.更改了tomcat的端口,tomcat/conf/server.xml
            3.netstat -luntp查看系统所有启动的端口
           4.启动memcached:1.ps -aux|grep mem 2.memcached -p11211 -u nobody -d
        5.netstat -luntp|grep 11211
        6.1.ls 2.cd /etc/nginx/conf.d/
        7.vi dep.conf
        8.vi /opt/app/lua/dep.lua
        加一个模块安装:cat install_memcache_lua.sh
        操作memcache如下
        有后台的情况下:ps -aux|grep mem 
        没后台的情况下:telnet 127.0.0.1 11211
                   set 如这个ip:103.215.191.72 0 1
                   1
                   STORED 存入成功
                   get 如这个ip:103.215.191.72
         
架构篇:性能的优化,以及安全的章节
  一.Nginx常见问题
    1.相同server_name多个虚拟主机访问优先级
        diff test_server1.conf test_server2.conf:查看多个虚拟主机区别命令
        按左右位置读取

    2.location匹配优先级
        =     ->    进行普通字符精确匹配,也就是完全匹配
        ^~     ->    表示普通字符匹配,使用前缀匹配
        ~\~* ->    表示执行一个正则匹配()    
        
    3.try_files使用
        作用:按顺序检查文件是否存在
        语法:location / {
             try_files $uri $uri/ /index.php;
              }
        ps -aux|grep java:
        实写如下:
        location / {
        root /opt/app/code/cache;这是他讲课的安装目录,如usr/local
        try_files $uri @java_page;
        }
        location @java_page{
        proxy_pass http://127.0.01:9090;
        }

        场景:可用于缓存和动静分离

    4.Nginx的alias和root区别
        location /request_path/image/ {
        root /local_path/image/;
        }
        http://www.imooc.com/request_path/image/cat.png
        /local_path/image/request_path/image/cat.png

        location  /request_path/image/ {
        alias /local_path/image/;
        }
        http://www.imooc.com/request_path/image/cat.png
        /local_path/image/cat.png

    5.用什么方法传递用户的真实IP
        set x_real_ip=$remote_addr
        $x_real_ip=IP1
    
    6.常见错误
        Nginx:413 Request Entity Too Large
        1.用户上传文件限制 client_max_body_size

        502 bad gateway
        2.后端服务无响应

        504 Gateway Time-out
        3.后端服务执行超时,默认是60秒
    
        http常见的错误码:403访问被起绝,404文件没找到,400请求参数错误
  
  二.Nginx性能优化
    1.性能优化考虑点
        1.当前系统结构瓶颈
        观察指标,压力测试
        2.了解业务模式
        接口业务类型,系统层次结构
        3.性能与安全
        权衡好对应的点
    2.接口压力测试工具
        1.安装:yum install httpd-tools
        2.使用:ab -n 2000 -c 2 http://l27.0.0.1/
               -n总的请求数
           -c并发数
           -k是否开启长连接

            3.演示ab的使用和Nginx对于后台服务的性能压测
        ab -n 2000 -c 2 http://l27.0.0.1/jesonc.html
        查看压测后的参数
        netstat -luntp|grep java:查看java启动的端口
        
    3.系统与Nginx性能优化        
        1.网络
        2.系统
        3.服务
        4.程序
        5.数据库,底层服务
        
        文件句柄:linux/Uxin 一切接文件,文件句柄就是一个索引,默认操作系统设置一般为1024
        设置方式:系统全局性修改,用户局部性修改,进程局部性修改
        vi /etc/security/limits.conf:系统全局性,用户局部性,修改文件句柄的地方
        尤其其实是新装的系统需设置
        vi /etc/nginx/nginx.conf:进程局部性修改文件句柄的地方
        
        CPU的亲和:把进程通常不会在处理器之间频繁迁移的频率小,减少性能损耗。
        
        cat /proc/cpuinfo|grep "physical id"|sort|uniq|wc -l
        查看有多少个物理CPU
        cat /proc/cpuinfo|grep "cores"|uniq
        查看有多少核心
        top进去按键盘1键展示出当前的数量
        核心就是cpu亲缘

        把Nginx的work进程对应的绑到不同的cpu上
        vi /etc/nginx/nginx.conf
        worker_processes 2;:表示当前启动了多少个进程,官方建议启动进程最好和cpu进程一致
        worker_cpu_affinity:配置cpu亲缘,3中绑定方式,常用的是:worker_cpu_affinity auto;
            ps -eo pid,args,psr | grep [n]ginx:看一下当前nginx所使用的cpu是哪一个
        
        events{事件处理器
          use epoll;
        worker_connections 1024;限制每一个wrok能够处理多少个连接
        }
        关闭不常用的日志
        gzip_disable "MSIE [1-6]\.";对IE6一下,不进行压缩。
        
  三.Nginx的安全篇
    1.常见的恶意行为
        爬虫行为和恶意抓取,资源盗用
        基础防盗链功能-目的不让恶意用户能轻易的爬取网站对外数据
        secure_link_module-对数据安全性提高加密验证和失败性,适合如核心重要数据
        access_module-对后台,部分用户服务的数据提供IP防控
      2.常见的应用层攻击手段 
        后台密码撞库-通过猜测密码字典不断对后台系统登录性尝试,获取后台登陆密码
        方法一.后台登陆密码复杂度
        方法二.access_module对后台提供IP防控
        方法三.预警机制
        文件上传漏洞-利用这些可以上传的接口将恶意代码植入到服务器中,在通过url去访问以执行代码
        http://www.imooc.com/upload/1.jpg/1.php
        Nginx将1.jpg作为php代码执行
        location ^~ /upload{
           root /opt/app/images;
           if($request_filename ~* (.*)\.php){
            return 403;
           }
        }
        SQL注入-利用为过滤/未审核用户输入的攻击方法,让应用运行本不应该运行的SQL代码
        SQL注入场景
        ' or 1=1#
        select * from user where username=" or 1=1#" and password="asdf"
        
      3.场景:Nginx+LUA构建waf防火墙
                    拦截Cookie类型攻击  JAVA    
                拦截异常post请求
        ->Nginx+LUA(waf)拦截cc攻击    -> PHP
                       拦截URL
                拦截arg           Python
        安装git命令:yum install git^C
        git clone https://github.com/loveshell/ngx_lua_waf.git
        cd ng
        cd ngx_lua_waf/
        cd /etc/nginx/
        mv /opt/download/
        mv /opt/download/ng
        mv /opt/download/ngx_lua_waf/
        mv /opt/download/ngx_lua_waf/ ./
        mv /opt/download/ngx_lua_waf/ ./waf/
        cd ./w
        cd ./waf/
        vi config.lua
    4.Nginx漏洞和新版本特性
        1.查看版本更新描述
        2.CVE-2017-7529:信息泄露漏洞

  四.基于Nginx的中间价架构
    Nginx的配置与使用经验        
        1.静态资源服务
        2.代理服务
        3.动静分离
        4.负载均衡
        5.Nginx在不同角色中这几的功能
        6.浏览器需不需要设置缓存,缓存周期
        7.对于静态资源防盗链是比不可少的,对那些资源设置防盗链
        8.流量的设置,要不要考虑对应的一些资源按照请求类型进行流量限制
        9.静态资源的压缩,如果比例压缩的合适,能大大节省服务端的性能流量io的消耗,
          什么样的方式压缩,采用什么样的压缩比例,哪所的类型。
        设计评估
        1.硬件: CPU 内存 硬盘    相应的配置如:动态的数据缓存以及要承受一定并发
        2.系统: 用户权限 日志目录存放
        3.关联服务:
            LVS,keepalive 运用于负载均衡 
            syslog        用于Nginx日志实时同步
            Fastcgi       性能调优安全
    配置注意事项
        1.合理配置
        2.了解原理
        3.关注日志


BTuC商对客 数据分析,代理均衡,

  

  
  

 

posted @ 2018-08-24 10:51  Bk小凯笔记  阅读(334)  评论(0编辑  收藏  举报