nginx基础

1. nginx源码安装依赖包:zlib-devel(提供数据压缩的函数库)    openssl-devel   pcre-devel(rewrite依赖pcre库)
   具体编译安装命令可查看./configure --help
   后面线上如果想开启debug,编译安装时需加--with-debug

2. IO类型:同步/异步 ---> 判断依据是否有消息通知机制
           阻塞/非阻塞
   
   IO模型:阻塞IO, 非阻塞IO, IO复用, 信号驱动IO, 异步IO
   
3. 配置文件(配置命令需要以 ‘;’ 结尾)

   1 main块常用配置
     
     正常运行必备的配置
       1 user username [groupname];     指定启动work_process的用户
       2 pid /var/run/nginx.pid;        指定nginx pid文件路径
       3 worker_rlimit_nofile 1024;     指定单个worker进程可以打开的文件句柄数(fd,文件描述符,跟并发有关)此处nofile为number of files
       4 worker_rlimit_sigpending num;  指定每个用户可以发给worker进程的信号数量
       
     性能优化相关配置
       1 worker_processes auto;               指定worker进程数,一般为系统cpu核心数。目前多数设置为auto
       2 worker_cpu_affinity 0001 0010 0100;  cpumask绑定,四颗cpu开启3个worker进程,绑定3个cpu。此配置不能隔离cpu
       3 worker_priority nice值;              指定worker进程优先级数值越小优先级越高,针对CPU调度,nginx默认nice值为0
       
     用于调试,定位问题的配置
       1 daemon on/off;              是否以守护进程方式启动nginx,开关控制启动后是否把信息直接打印到当前屏幕上
       2 master_process on/off;      是否以master/worker模型启动nginx,默认开启的,找问题时可以关闭以单个进程启动nginx
       3 error_log /PATH/error_log;  处于调试的需要可以指定debug级别,debug级别在编译是使用with-debug时这里才能生效
       
       
   2 event块常用配置
       1 worker_connections num;         每个worker进程的最大响应数。
         nginx作为web服务器时maxclient = worker_connections*worker_processes
         nginx作为反向代理时maxclient = worker_connections*worker_processes/4 因为作为反向代理和后端建联也需要fd,和浏览器建联需要2个fd。
       2 use [epoll|poll|select|rgsly];  指定事件驱动模型
       3 accept_mutex on/off;            惊群(处理请求的负载均衡锁)默认开启,开启状态不争抢链接,off状态请求进来睡眠状态的worker进程争抢链接
       4 lock_file /path/;               锁文件路径      
      
   3 http块
       多个server可共享使用配置,有些也可在单个server内部配置。
       1 include mime.types;      导入多媒体类型定义文件
       2 default_type application/octet-stream
       3 log_format main '';      定义日志文件格式,一般会单独文件定义然后include导入
       4 access_log logs/access.log main; 日志文件路径
    *  5 sendfile on/off;         默认开启,一个系统调用的配置,开启可以减少系统从内核到网络的copy,直接在内核空间封装成响应包进行响应,提高性能
    *  6 tcp_nopush on/off;       只有在sendfile开启时有用,nginx响应时把报文首部打包成一个报文发送。默认off
       7 keepalive_timeouot 65;   长连接 设置为0表示禁止此功能,默认为75秒,是客户端请求相关配置
       8 keepalive_requests 8192; 每个链接最大请求资源数量,和keepalive_timeout协同使用,默认数量为100
         keepalive_disable  none;指明禁止哪种浏览器使用keeplive功能
    *  9 tcp_nodelay on/off;      tcp协议长连接有nagle算法,提高效率把小的报文合并一个发送,目标需要是一个主机,需要长连接keepalive时使用,开启时节省带宽,但是响应慢,对于web服务器而言尽量为off
      10 gzip on/off;             压缩提高网络传输速度
      
         send_timeout  60s;       服务端响应超时配置
       
       
        server {
            listen PORT;          后面可以加default_server,ssl,http2,spdy 参数
            server_name  DOMAIN ....;  可以用空格分隔指定多个domain,可以使用通配符,例:*.baidu.com。使用正则的情况先是精确匹配,再是左侧通配符,然后是右侧通配符,最后是正则表达式
            root PATH;            设置资源路径映射,可以用在location中
            index index.html;
        
            
            location [=|~|~*|^~] uri | @name {}
            =   精确匹配
            ~   正则匹配,区分大小写
            ~*  正则匹配,不区分大小写
            ^~  uri的左半部分匹配,不区分大小写
            优先级: = > ^~ > ~* 或 ~ > 不带符号的url  如果优先级相同则从上向下匹配
        }
       
       11 alias 只能用于location段(用来定义路径,root既可以在location也可以在server)
         
         location /images/ {
            root /data/imgs/;
         }       
         root: 访问/images/test.jpg  ----->  /data/imgs/images/test.jpg  
         
         location /images/ {
            alias /data/imgs/;    如果使用alias path后面的/不能省略
         }
         alias: 访问/images/test.jpg  ----->  /data/imgs/test.jpg
        
        
       12 error_page 自定义错误页面使用,根据http错误状态码重定向错误页面
       
         error_page  404  /404.html           这样定义默认目录在根下
         error_page  404  =200  /404.html     后面跟=200 把404错误响应码改成了200,让客户端以为是一个正常响应
        
         error_page  502 503 504 /50X.html
         location /50X.html {                 利用location重新定义了错误页面的根位置
            root /error;
         }
      
       13 try_files 如果访问的页面不存在则尝试访问后面的文件
       
         index index.htm;                     这里访问image 默认访问index.html如果index.html不存在则尝试1.html,2.html
         location /image/ {
             try_files /image/1.html /imgae/2.html;
         }

         如果尝试的资源都不存在容易陷入死循环,需要加如下配置
        
         location = /images/2.html {
             expires 30s;
         }

       14 client_body_buffer_size 16k;        服务器接收客户端请求body缓冲区大小64位系统默认16K ,例如客户端提交的表单,如果超出16k将会存到磁盘上
       
       15 client_body_temp_path path;        针对超出client_body_buffer_size指定的存储磁盘临时文件路径
          client_body_temp_path /spool/nginx/client_temp 1 2;   1 2表示级别。 这里1表示使用1个16进制创建1级子目录,2个16进制创建2级子目录,一共有16个一级子目录,每个一级子目录有16*16个二级子目录,可以有三个级别,表示3层子目录
          
       对客户端请求进行限制

       16 limit_except METHOD                  对指定范围之外的其他方法进行限制

          limit_except GET {
              allow 192.168.1.0/32;
              deny  all;
          }       
        
       17 limit_rate rate;                     对客户端请求限速,默认为0,为关闭限速功能,限速单位为每秒字节数
       
       文件操作优化相关配置
       
       18 aio on/off;                          异步IO模式
       
       19 directio size | off;                 超过设置值,就不在内存中缓存直接读取
       
       
rewrite


    set        用来设置变量
    
    if         条件判断语句,用来判断一些在***rewrite语句中无法直接匹配的条件**,比如检测文件存在与否,http header,cookie等  
    
                   if(条件) {…}
    
               - 当if表达式中的条件为true,则执行if块中的语句
               - 当表达式只是一个变量时,如果值为空或者任何以0开头的字符串都会当作fal
               - 直接比较内容时,使用 = 和 !=
               - 使用正则表达式匹配时,使用

               ~ 大小写敏感匹配
               ~* 大小写不敏感匹配
               !~ 大小写敏感不匹配
               !~* 大小写不敏感不匹配
               
                ~为正则匹配, 后置*为大小写不敏感, 前置!为”非”操作      ********此匹配只针对if语句,不能用到rewrite语句

    return     return可用来直接设置HTTP返回状态,比如403,404等(301,302不可用return返回)
    break      立即停止rewrite检测
    rewrite    用法: rewrite 正则 替换 标志位
    
               标志位:break – 停止rewrite检测,也就是说当含有break flag的rewrite语句被执行时,该语句就是rewrite的最终结果
                       last – 停止rewrite检测,但是跟break有本质的不同,last的语句不一定是最终结果,这点后面会跟nginx的location匹配一起提到
                       redirect – 返回302临时重定向,一般用于重定向到完整的URL(包含http:部分)
                       permanent – 返回301永久重定向,一般用于重定向到完整的URL(包含http:部分)
    
                ####这里说下rewrite 标志位last 是匹配location的不是中断rewrite匹配,如果location中包含rewrite还是会匹配的
    
                    location /download/ {
                        rewrite  ^(/download/.*)/media/(.*)\..*$  $1/mp3/$2.mp3  ;
                        rewrite  ^(/download/.*)/movie/(.*)\..*$  $1/avi/$2.mp3  ;
                        rewrite  ^(/download/.*)/avvvv/(.*)\..*$  $1/rmvb/$2.mp3 ;
                    }

                    如果请求为 /download/acg/moive/UBW.avi

                    last的情况是: 在第2行rewrite处终止,并重试location /download..死循环
                    break的情况是: 在第2行rewrite处终止,其结果为最终的rewrite地址.

        if ($http_user_agent ~ MSIE) {                 此处判断UA为MSIE则匹配下方跳到目录/msie/下
            rewrite  ^(.*)$  /msie/$1  break;          此处 $1 为rewrite处正则匹配圆括号()内内容,$1,$2,$3......表示前方正则引用部分**()内为正则引用**,依照从左到右的顺序
        }

                

        if (!-f $request_filename) {                   如果请求文件名不存在,则反向代理localhost
            break;
            proxy_pass  http://127.0.0.1;
        }

               














        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值