lua获取请求参数以及在nginx.conf中使用
-- 获取请求路径
local request_uri = ngx.var.request_uri
-- 从 header中取值
local token = ngx.req.get_headers()["token"]
-- 获取cookie中的值
local user_id = ngx.var.cookie_userId
-- 获取args中的值
local user_id = ngx.var.args_参数名
--[[
如:
#尝试访问 /nginx_var?a=hello,world
content_by_lua_block {
ngx.say(ngx.var.arg_a)
}
]]--
-- 获取body参数,ngx.req.get_post_args() 获取到的可能会是这种格式: 注:整体是table类型
{"{\"content\": {\"loginUrl\": \"http:\/\/10.2.3.62:10001\/ia\/oss\/token\"}}":true}
ngx.req.read_body()
local post_args_tab = ngx.req.get_post_args()
local args
for k, _ in pairs(post_args_tab) do
args = core.json.decode(k)
end
下面是一个示例
# 设置纯lua外部函数库的搜索路径(';;'代表默认的路径)
lua_package_path '/foo/bar/?.lua;/blah/?.lua;;';
# 设置用C语言编写的lua外部函数库的搜索路径(也可以使用';;')
lua_package_cpath '/bar/baz/?.so;/blah/blah/?.so;;';
server {
location /lua_content{
#使用default_type确定MIME的类型
default_type 'text/plain';
content_by_lua_block{
ngx.say('Hello,world!')
}
}
location /nginx_var {
#使用default_type确定MIME的类型
default_type 'text/plain';
#尝试访问 /nginx_var?a=hello,world
content_by_lua_block {
ngx.say(ngx.var.arg_a)
}
}
location = /request_body {
client_max_body_size 50k;
client_body_buffer_size 50k;
content_by_lua_blick {
ngx.req.read_body() -- 明确要读取请求的body
local data = ngx.req.get_body_data()
if data then
ngx.say("body data")
ngx.print(data)
return
end
-- body有可能缓存到一个临时文件中
local file = ngx.req.get_body_file()
if file then
ngx.say("body is in file ",file)
else
ngx.say("no body found")
end
}
}
# 在lua中非阻塞IO的子请求
# (当然,一个更好的方式是使用cosockets)
location = /lua {
# 使用default_type来确定MIME的类型
default_type 'text/plain';
content_by_lua_block {
local res = ngx.location.capture("/some_other_location")
if res then
ngx.say("status:",res.status)
ngx.say("body:")
ngx.print(res.body)
end
}
}
location = /foo {
rewrite_by_lua_block {
res = ngx.location.capture("/memc",
{ args = { cmd = "incr",key = ngx.var.uri }}
)
}
proxy_pass http://blah.blah.com
}
location = /mixed {
rewrite_by_lua_file /path/to/rewrite.lua;
access_by_lua_file /path/to/access.lua;
content_by_lua_file /path/to/content.lua;
}
# 在代码路径中使用nginx变量
# 警告:nginx变量中的内容必须被小心的过滤出来
# 否则这里会有严重的安全风险
location ~ ^/app/([-_a-zA-Z0-9/]+) {
set $path $1;
content_by_lua_file /path/to/lua/app/root/$path.lua;
}
location / {
client_max_body_size 100k;
client_body_buffer_size 100k;
access_by_lua_block {
-- 检查客户端的IP地址是否在我们的黑名单中
if ngx.var.remote_addr == "132.5.72.3" then
ngx.exit(ngx.HTTP_FORBIDDEN)
end
-- 检查URI中是否含有不良的词语
if ngx.var.uri and
string.match(nax.var.request_body,"evil")
then
return ngx.redirect("/terms_of_use.html")
end
-- 测试通过
}
# proxy_pass/fastcgi_pass/etc settings
}
}
lua获取请求参数以及在nginx.conf中使用的更多相关文章
- 学习SpringMVC——如何获取请求参数
@RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@CookieValue)!她(@ModelAndView) ...
- springMvc源码学习之:spirngMVC获取请求参数的方法2
@RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他 (@CookieValue)!她(@ModelAndView ...
- request对象常用API 获取请求参数的值 request应用 MVC设计模式
1 request对象常用API 1)表示web浏览器向web服务端的请求 2)url表示访问web应用的完整路径:http://localhost:8080/day06/Demo1 ...
- struts2获取请求参数的三种方式及传递给JSP参数的方式
接上一篇文章 package test; import com.opensymphony.xwork2.ActionSupport; import javax.servlet.http.*; impo ...
- 学习SpirngMVC之如何获取请求参数
学习SpringMVC——如何获取请求参数 @RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@Cooki ...
- springMVC(spring)+WebSocket案例(获取请求参数)
开发环境(最低版本):spring 4.0+java7+tomcat7.0.47+sockjs 前端页面要引入: <script src="http://cdn.jsdelivr.ne ...
- Structs2 中拦截器获取请求参数
前言 环境:window 10,JDK 1.7,Tomcat 7 测试代码 package com.szxy.interceptor; import java.util.Map; import jav ...
- ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段
ServletRequest 基本概念 JavaWeb中的 "Request"对象 实际为 HttpServletRequest 或者 ServletRequest, ...
- spring(spring mvc)整合WebSocket案例(获取请求参数)
开发环境(最低版本):spring 4.0+java7+tomcat7.0.47+sockjs 前端页面要引入: <script src="http://cdn.jsdelivr.ne ...
- JavaScript获取请求参数
<script type="text/javascript"> //获取请求参数 function paramsMap() { var url = window.loc ...
随机推荐
- Linux 网络设备命名规则
在 Linux 系统中,网络接口的命名规则已经经历了几次重要变化,特别是从传统的以 eth 和 wlan 开头的名称,转变到更现代.更具描述性的命名方式.以下是这些变化的概述: 1. 传统命名约定 在 ...
- DB\redis\zookeeper分布式锁设计
redis 参考目录: 生产级Redis 高并发分布式锁实战1:高并发分布式锁如何实现 https://www.cnblogs.com/yizhiamumu/p/16556153.html 生产级Re ...
- 6.23 Web日志分析&php&自动化工具
应急响应的目的:保护阶段.分析.复现.修复.建议 分析出攻击时间,攻击操作,攻击结果,安全修复等给出合理方案: 知识点 熟悉常见web安全攻击技术 熟悉日志启用及存储查看 熟悉日志中记录数据库分类及分 ...
- 合合信息亮相“海聚英才”全球创新创业峰会,政企研合力推动AI人才培养
近日,"聚上海,创未来"第三届"海聚英才"全球创新创业峰会在沪举行,"创新之路:卓越工程师培养交流研讨会"(简称"研讨会" ...
- Kubernetes Pod原理(十六)
一.Pod Kubernetes 最基本的调度单元 前面我们了解了 Kubernetes 的基本架构,以及如何使用资源清单在集群中部署一个应用.我们也了解到了 Pod 是 Kubernetes 集群中 ...
- QQ或者微信可以放昵称的超好看的符号
☪︎⋆ ✯ ⛈ •ᴗ• •ᴥ• ◔.̮◔ ᕱ ᕱ ⸝⸝· ᴥ ·⸝⸝ ʕ·͡ˑ·ཻʔ ʕ•̫͡•ོʔ ˃̣̣̥᷄⌓˂̣̣̥᷅ °꒰'ꀾ'꒱° ⋆ᶿ̵᷄ ˒̼ ᶿ̵᷅⋆ ˙ϖ˙ ⚝ ︎ .˗ˏˋ♡ˎˊ˗ ...
- Linux中的一些命令
1.新增新用户lili,不允许登录系统,用户ID为3000===useradd -u 3000 -s /sbin/nologin lili2.循环创建目录 /www/wwwroot/html/test ...
- CF1659 Codeforces Round #782 (Div. 2) 题解
之前说过的题解,E应该不会补了(大概) A Red Versus Blue 题意非常简单,构造题.给定\(r\)个红色气球和\(b\)个蓝色气球,将它们排成一排,要求使得连续出现的最多的同色气球最少, ...
- 十三载求索续风华,数智化扬帆启新航 | 万字长文回顾DTC 2024
4月13日下午,为期两天的第十三届数据技术嘉年华(DTC 2024)在北京新云南皇冠假日酒店圆满落下帷幕.本次大会由中国数据库联盟与墨天轮社区联合主办,以"智能·云原生·一体化--DB与AI ...
- C#查漏补缺----Exception处理实现,无脑抛异常不可取
前言 环境:.NET 8.0 系统:Windows11 参考资料:CLR via C#, .Net Core底层入门 https://andreabergia.com/blog/2023/05/err ...