• Nginx-(四)基本模块2


    nginx常用模块介绍(二)

    ngx_http_rewrite_module模块配置

    (1)       rewrite  regex  replacement [flag];

    将请求的url基于正则表达式进行重写;

    a)         regex:正则表达式,用于匹配用户请求的url;

    b)         replacement:重写为的结果;

    c)         [flag]:

             last:类似于bash编程中的continue指令,重写完成之后停止对当前uri的进一步处理(终止本次循环),改为对新url的新一轮处理;

             break:类似于bash编程中的breake指令,重写完成之后停止当uri的处理(跳出rewrite),转向其后面的其它配置;

             redirect:重写完成之后会返回客户端一个临时的重定向,由客户端对新的url重新发起请求(302);

    permanent:重写完成之后会返回客户端一个永久的重定向,由客户端对新的url重新发起请求(301);

    d)         工作流程:

    1st)   基于server_name匹配对应的虚拟主机

    2nd)  匹配虚拟主机中的对应的location

    3rd)   将用户请求的URI做正则表达式匹配,匹配到是将URI替换为replacement指定的字符串

    4th)   在同一个location中的多个rewrite规则会自上而下被匹配,可以使用flag控制此功能。

             注意当replacement内容为http或https开头时,则替换结果直接以重定向方式发送给请求端

             eg:server {

                       ...

                       rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 last;

                       rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra  last;

                       return  403;

                      ...

             }                                   

             http://www.magedu.com/download/a/b/c/media/32.wmv  -->

             /download/a/b/c/mp3/32.mp3

                                        

                       补充:PCRE正则表达式元字符

                                字符匹配:., [ ], [^]

                                次数匹配:*, +, ?, {m}, {m,}, {m,n}

                                位置锚定:^, $

                                或者:|

                                分组:(), 后向引用, $1, $2, ...

            

    (2)       if (condition) { ... }

             条件判断,引用新的配置上下文;

             condition:

                       比较表达式:

                                ==,!=

                                ~:模式匹配,区分字符大小写;

                                ~*:模式匹配,不区分字符大小写;

                                !~:模式不匹配,区分字符大小写;

                                !~*: 模式不匹配,不区分字符大小写;

                       文件及目录判断:

                                -f, !-f:是否存在且为普通文件;

                                -d, !-d: 是否存在且为目录;

                                -e, !-e:是否存在;

                                -x, !-x:是否存在且可执行;

            

    (3)       return code [text];

             return code URL;

             return URL;

                       立即停止对请求的uri的处理,并返回指定的状态码;

                      

    (4)       set $variable  value;     

                       自定义变量,变量赋值;

                      

    (5)       rewrite_log on | off;

                       是否将重写日志记入error log中,默认为关闭;

                      

             调试方法:

                       错误日志debug;

                       开启rewrite_log;

                      

    ngx_http_gzip_module模块配置

             gzip on | off;

                       启用或禁用gzip压缩响应报文;

             gzip_comp_level level;

                       压缩比,1-9,默认为1;

             gzip_disable regex ...;

                       regex是为用于匹配客户端响应器类型的正则表达式;

                       表示对何种浏览器禁止使用压缩功能;

             gzip_min_length length;

                       触发压缩功能的响应报文的最小长度;

             gzip_http_version 1.0 | 1.1;

                       设定启用压缩功能时,协议的最小版本;

             gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;

                       定义对客户端请求的具有何种请求属性的资源启用压缩功能;如expired则表示对由于使用了expire首部而无法缓存的对象启用压缩功能;

             gzip_types mime-type ...;

                       指明仅对哪些类型的资源执行压缩操作;即压缩过滤器;

            

             示例:

                       gzip  on;

                       gzip_http_version 1.0;

                       gzip_comp_level 6;

                       gzip_disable msie6;

                       gzip_min_length 2;

                       gzip_types text/plain text/css text/xml application/x-javascript application/xml application/json application/java-script;                            

    ngx_http_fastcgi_module模块配置(fastcgi协议代理)

                                                                                                

             CENTOS中,base源中默认有php-fpm所以我们不需要编译安装,直接yum安装。需要编译安装时要想支持fpm机制需要在编译时,使用--enable-fpm将此功能添加。

             注意,PHP包是http中的一个模块,NGINX要想使用fpm机制,需要安装的包是php-fpm。 

    安装,php-fpm和php-mysql

    yum -y install php-fpm php-mysql

    查看php-fpm安装生成的文件

    rpm -ql php-fpm      

    php-fpm的工作方式:

                       listen = 127.0.0.1:9000

                       listen.allowed_clients = 127.0.0.1

                       pm = dynamic|static

                                pm.start_servers:启动fpm进程时启动的工作进程数量;

                                pm.min_spare_servers:最少空闲进程数;

                                pm.max_spare_servers:最大空闲进程数;

                                pm.max_children:最大工作进程数;

             user = USERNAME

             group = GROUPNAME

            

    fastcgi模块指令:

    (1)       fastcgi_pass address;

                       address为fastcgi server监听的地址;

                       示例:fastcgi_pass   127.0.0.1:9000;

                      

    (2)       fastcgi_index name;

                       定义fastcgi应用的默认主页;

                      

                       示例:fastcgi_index  index.php;

                      

    (3)       fastcgi_param parameter value [if_not_empty];

                       设定传递给后端fastcgi server参数及其值;

                      

                       示例:fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

                               

                       /index.php --> /scripts/index.php

                                                  

    (4)       fastcgi_cache_path path  [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size];

    a)         定义缓存:缓存空间等;

                      

    b)         可应用的上下文 :http

    c)                  缓存机制:在内存中缓存,被缓存文件的元数据,在磁盘上存放元数据所对应的文件。磁盘文件的名字为此文件内容的校验码。例如MD5校验码128位,那么磁盘文件名即是32位16进制数据。在缓存文件众多的时候会导致数据查询慢,所以需要采用分级存储的机制。nginx最多可以使用三级存储,例如第一级使用前两个字符,即有16*16=256个目录,第二级使用前两个字符,即每个一级目录下有16*16=256个子目录,第三级采用1个字符即每个二级自目录下,又有16个子目录。

                                元数据:内存,即为keys_zone;

                                数据:磁盘,即为path;

    d)         levels=#[:#[:#]]

             levels=2:2:1

                               

    e)         keys_zone=name:size

    用来定义nginx fastcgi使用缓存的名称和大小。

             name: cache的标识符;

             size:元数据cache大小;

    f)          [inactive=time

             非活动时间    

             max_size:缓存空间上限;

                      

    (5)       fastcgi_cache zone | off;

                       调用定义过的缓存;

                      

                       zone即为通过fastcgi_cache_path定义缓存时其keys_zone参数中的name;

                      

    (6)       fastcgi_cache_key string;

                       定义要使用缓存键;指名用什么当做缓存的key

                      

                       使用示例:fastcgi_cache_key   $request_uri;

                      

    (7)       fastcgi_cache_methods GET | HEAD | POST ...;

                       为何请求方法对应的请求进行缓存,默认为GET和HEAD;

                      

    (8)       fastcgi_cache_min_uses number;

                       缓存项的最少使用次数;

                      

    (9)       fastcgi_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_503 | http_403 | http_404 | off ...;

                       是否可使用stale缓存项响应用户请求;

                      

    (10)   fastcgi_cache_valid [code ...] time;

                       对不同响应码的响应设定其可缓存时长;

                       示例:

                                fastcgi_cache_valid 200 302 10m;

                                fastcgi_cache_valid 404      1m;                                             

            

             注意:调用缓存时,至少应该指定三个参数

                       fastcgi_cache

                       fastcgi_cache_key

                       fastcgi_cache_valid

    配置和验证缓存功能

    1. 配置

    http {

        include       mime.types;

        default_type  application/octet-stream;

        fastcgi_cache_path /tmp/fcgi  levels=2:2:1 keys_zone=fcgicache:10m max_size=20m;

             server {

                     listen       80;

                     server_name  localhost;

                   location ~ .php$ {

                           root   /home/scripts/;

                         fastcgi_pass   127.0.0.1:9000;

                           fastcgi_index  index.php;

                         fastcgi_param  SCRIPT_FILENAME  /home/scripts/$fastcgi_script_name;

                            include        fastcgi_params;

                         fastcgi_cache fcgicache;

                           fastcgi_cache_key $request_uri;

                         fastcgi_cache_valid 200 302 10m;

                                                 }

                       }

    }

    1. 验证

    a)         使用浏览器访问服务http://IP:PORT/1.php

    b)         在另外一台linux主机上使用ab命令

             ab -c 10 -n 100 http://IP:PORT/1.PHP

    1. 查看/tmp/fcgi下是否有缓存文件
  • 相关阅读:
    转:如何判断软件功能特性的依赖
    原创:运行loadtest时报错the load test results repository was created with a previous version and is not compatible
    转:使用正则表达式进行高效的测试
    6.2.1 HTTP音频播放
    6.2 网络音频
    6.1.3 控制服务中的MediaPlayer
    android开源项目和框架
    6.1.2 加上MediaPlayer的本地服务
    6.1.1 服务
    6.1 后台音频播放
  • 原文地址:https://www.cnblogs.com/wxxjianchi/p/11157162.html
Copyright © 2020-2023  润新知