OpenResty系统下载
提供支持win32版本
学习文档
OpenResty最佳实践
agentzh 的 Nginx 教程
nginx内置变量详解
Nginx API for Lua
lua-resty-mysql API
摘要
Lua语法
Lua具有一项与众不同的特性,允许函数返回多个值。Lua的库函数中,有一些就是返回多个值。返回多个值时,值之间用“,”隔开。
Nginx基础
多个location配置的情况下匹配顺序为
- 首先匹配 =
- 其次匹配 ^~
- 其次是按文件中顺序的正则匹配
- 最后是交给 / 通用匹配
- 当有匹配成功时候,停止匹配,按当前匹配规则处理请求
ReWrite语法
- last – 基本上都用这个Flag
- break – 中止Rewirte,不在继续匹配
- redirect – 返回临时重定向的HTTP状态302
- permanent – 返回永久重定向的HTTP状态301
代码片段
Nginx 支持不存在的php文件走thinphp伪静态规则
set $flag 0;if ($request_filename !~* "index\.php"){ set $flag "${flag}1";}if (!-f $request_filename) { set $flag "${flag}2";}if ( $flag = "012"){ rewrite ^/website/(.+\.php)$ /website/index.php/$1 last;}
Nginx 支持ThinkPHP
location ~ .+\.php($|/) { root /var/wwwroot; set $script $uri; set $path_info "/"; if ($uri ~ "^(.+\.php)(/.+)") { set $script $1; set $path_info $2; } fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param PATH_INFO $path_info; fastcgi_param SCRIPT_FILENAME $document_root/$script; fastcgi_param SCRIPT_NAME $script;}
Nginx和lua配合判断request_filename是否存在
nginx
if (!-e $request_filename) { set $filenotexist true;}
lua
if ngx.var.filenotexist then ngx.var.filenotexist=nil; local cururi=ngx.var.request_uri; local uri='/'..webtype..'/index.php'..cururi; ngx.req.set_uri(uri, true);end