首页 > 代码库 > Nginx学习笔记(一)
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-read
、server-rewrite
、find-config
、rewrite
、post-rewrite
、preaccess
、access
、post-access
、try-files
、content
以及 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默认忽略掉下划线可能有些原因
Nginx学习笔记(一)