• Nginx学习笔记(一)


    一、nginx跳转

    1、echo_exec

    2、rewrite

    二、子请求

    1、echo_location

    2、auth_request

    三、nginx变量

    1、内建变量作用于全局的有

    $request_method

    四、nginx配置指令的执行顺序

    1、设计到的模块有ngx_rewite,ngx_access,ngx_echo

    rewrite>access>content

    2、ngx_lua提供对应模块的方法

    rewrite_by_lua;运行在rewrite末尾

    access_by_lua;运行在access末尾

     content_by_lua

    access_by_lua例子:

    location /hello {
            access_by_lua '
                if ngx.var.remote_addr == "127.0.0.1" then
                    return
                end
    
                ngx.exit(403)
            ';
    
            echo "hello world";
    }

     3、在 rewrite 和 access 这两个阶段,多个模块的配置指令可以同时使用,content模块只能有一个"内容处理程序"

    例子:

    location /test {
         echo hello;
         content_by_lua 'ngx.say("world")';
    }
    $ curl 'http://localhost:8080/test'
    world

     4、content 阶段的运行顺序,依次是 "内容处理程序",ngx_index 模块, ngx_autoindex 模块,以及 ngx_static 模块

    ngx_index和ngx_autoindex如果请求的uri不以/结尾,直接放弃解析,调到ngx_static模块

    5、Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是 post-readserver-rewritefind-configrewritepost-rewritepreaccessaccesspost-accesstry-filescontent 以及 log

    (1)post-read

    ngx_realip 模块提供的 set_real_ip_from 和 real_ip_header,使用的原因:一般我们会在 Nginx 之前的代理服务器中把请求的原始来源地址编码进某个特殊的 HTTP 请求头中(例如上例中的 X-My-IP 请求头),然后再在 Nginx 一侧把这个请求头中编码的地址恢复出来。这样 Nginx 中的后续处理阶段(包括 Nginx 背后的各种后端应用)就会认为这些请求直接来自那些原始的地址,代理服务器就仿佛不存在一样。

    set_real_ip_from 指令规定了来源地址的改写操作只对那些来自 *.*.*.* 的请求生效,可以配置多个

    real_ip_header 配置读取ip的header key

    (2)server-rewrite 写在server节点下的rewrite函数在这个处理过程执行

    (3)find-config   这个阶段并不支持 Nginx 模块注册处理程序,完成当前请求与 location 的配对

    (4)rewrite

    (5)post-rewrite 完成rewrite 阶段所要求的“内部跳转”操作

    (6)preaccess 标准模块 ngx_limit_req 和 ngx_limit_zone 就运行在此阶段,前者可以控制请求的访问频度,而后者可以限制访问的并发度

    (7)access

    (8)post-access 主要用于配合 access 阶段实现标准 ngx_http_core 模块提供的配置指令 satisfy 的功能

    (9)try-files

    五、nginx配置记录

    export LUAJIT_LIB=/usr/local/opt/luajit/lib
    export LUAJIT_INC=/usr/local/opt/luajit/include/luajit-2.0
    ./configure
    --user=www --group=www
    --prefix=/usr/local/opt/nginx-self
    --with-http_realip_module
    --with-http_image_filter_module
    --with-openssl=/usr/local/source/openssl-1.0.1u
    --with-cc-opt="-I/usr/local/opt/pcre/include"
    --with-ld-opt="-L/usr/local/opt/pcre/lib"
    --add-module=/usr/local/source/ngx_devel_kit-0.3.0
    --add-module=/usr/local/source/lua-nginx-module-0.10.6
    --add-module=/usr/local/source/nginx-http-footer-filter
    --add-module=/usr/local/source/nginx-1.10.1/module/echo-nginx-module-0.60

    六、header中不支持下划线"_"

    nginx对header name的字符做了限制,默认 underscores_in_headers 为off,表示如果header name中包含下划线,则忽略掉。
    处理办法有两种:
    第一种:配置中http部分 增加underscores_in_headers on; 配置
    第二种:用减号-替代下划线符号_,避免这种变态问题。nginx默认忽略掉下划线可能有些原因

  • 相关阅读:
    usb mass storage device
    spice
    ubuntu14.04.03 vsftpd
    MingW编译virt-viewer
    virt viewer Usbredir USB重定向
    libvirt虚拟系统如何增加usb设备
    Jquery控件jrumble
    【推荐系统实战】:C++实现基于用户的协同过滤(UserCollaborativeFilter)
    STL_算法_查找算法(binary_search、includes)
    POJ 2479 Maximum sum
  • 原文地址:https://www.cnblogs.com/hifelix/p/5893205.html
Copyright © 2020-2023  润新知