0

0

nginx lua api翻译

php中文网

php中文网

发布时间:2016-08-08 09:30:54

|

1324人浏览过

|

来源于php中文网

原创

<span>location</span> /foo <span>{</span><span>set</span><span>$a</span><span>32</span><span>;</span><span>set</span><span>$b</span><span>56</span><span>;</span>
 
        set_by_lua <span>$sum</span><span>'return tonumber(ngx.arg[1]) + tonumber(ngx.arg[2])'</span><span>$a</span><span>$b</span><span>;</span>
 
        echo <span>$sum</span><span>;</span><span>}</span>
<span>location</span> /foo <span>{</span><span>set</span><span>$my_var</span><span>''</span><span>;</span><span><em># this line is required to create $my_var at config time</em></span>
        content_by_lua <span>'
            ngx.var.my_var = 123;
            ...
        '</span><span>;</span><span>}</span>
  ngx.OK <span>(</span><span>0</span><span>)</span>
  ngx.ERROR <span>(</span>-<span>1</span><span>)</span>
  ngx.AGAIN <span>(</span>-<span>2</span><span>)</span>
  ngx.DONE <span>(</span>-<span>4</span><span>)</span>
  ngx.DECLINED <span>(</span>-<span>5</span><span>)</span>
  ngx.HTTP_GET
  ngx.HTTP_HEAD
  ngx.HTTP_PUT
  ngx.HTTP_POST
  ngx.HTTP_DELETE
  ngx.HTTP_OPTIONS   (added in the v0.5.0rc24 release)
  ngx.HTTP_MKCOL     (added in the v0.8.2 release)
  ngx.HTTP_COPY      (added in the v0.8.2 release)
  ngx.HTTP_MOVE      (added in the v0.8.2 release)
  ngx.HTTP_PROPFIND  (added in the v0.8.2 release)
  ngx.HTTP_PROPPATCH (added in the v0.8.2 release)
  ngx.HTTP_LOCK      (added in the v0.8.2 release)
  ngx.HTTP_UNLOCK    (added in the v0.8.2 release)
  ngx.HTTP_PATCH     (added in the v0.8.2 release)
  ngx.HTTP_TRACE     (added in the v0.8.2 release)
  value <span>=</span> ngx.HTTP_OK <span>(</span><span>200</span><span>)</span>
  value <span>=</span> ngx.HTTP_CREATED <span>(</span><span>201</span><span>)</span>
  value <span>=</span> ngx.HTTP_SPECIAL_RESPONSE <span>(</span><span>300</span><span>)</span>
  value <span>=</span> ngx.HTTP_MOVED_PERMANENTLY <span>(</span><span>301</span><span>)</span>
  value <span>=</span> ngx.HTTP_MOVED_TEMPORARILY <span>(</span><span>302</span><span>)</span>
  value <span>=</span> ngx.HTTP_SEE_OTHER <span>(</span><span>303</span><span>)</span>
  value <span>=</span> ngx.HTTP_NOT_MODIFIED <span>(</span><span>304</span><span>)</span>
  value <span>=</span> ngx.HTTP_BAD_REQUEST <span>(</span><span>400</span><span>)</span>
  value <span>=</span> ngx.HTTP_UNAUTHORIZED <span>(</span><span>401</span><span>)</span>
  value <span>=</span> ngx.HTTP_FORBIDDEN <span>(</span><span>403</span><span>)</span>
  value <span>=</span> ngx.HTTP_NOT_FOUND <span>(</span><span>404</span><span>)</span>
  value <span>=</span> ngx.HTTP_NOT_ALLOWED <span>(</span><span>405</span><span>)</span>
  value <span>=</span> ngx.HTTP_GONE <span>(</span><span>410</span><span>)</span>
  value <span>=</span> ngx.HTTP_INTERNAL_SERVER_ERROR <span>(</span><span>500</span><span>)</span>
  value <span>=</span> ngx.HTTP_METHOD_NOT_IMPLEMENTED <span>(</span><span>501</span><span>)</span>
  value <span>=</span> ngx.HTTP_SERVICE_UNAVAILABLE <span>(</span><span>503</span><span>)</span>
  value <span>=</span> ngx.HTTP_GATEWAY_TIMEOUT <span>(</span><span>504</span><span>)</span><span>(</span>first added in the v0.3.1rc38 release<span>)</span>
  ngx.STDERR
  ngx.EMERG
  ngx.ALERT
  ngx.CRIT
  ngx.ERR
  ngx.WARN
  ngx.NOTICE
  ngx.INFO
  ngx.DEBUG
<span>location</span> /test <span>{</span>
        rewrite_by_lua <span>'
            ngx.say("foo = ", ngx.ctx.foo)
            ngx.ctx.foo = 76
        '</span><span>;</span>
        access_by_lua <span>'
            ngx.ctx.foo = ngx.ctx.foo + 3
        '</span><span>;</span>
        content_by_lua <span>'
            ngx.say(ngx.ctx.foo)
        '</span><span>;</span><span>}</span>
    foo = nil
    <span>79</span>
<span>location</span> /sub <span>{</span>
        content_by_lua <span>'
            ngx.say("sub pre: ", ngx.ctx.blah)
            ngx.ctx.blah = 32
            ngx.say("sub post: ", ngx.ctx.blah)
        '</span><span>;</span><span>}</span>
 
    <span>location</span> /main <span>{</span>
        content_by_lua <span>'
            ngx.ctx.blah = 73
            ngx.say("main pre: ", ngx.ctx.blah)
            local res = ngx.location.capture("/sub")
            ngx.print(res.body)
            ngx.say("main post: ", ngx.ctx.blah)
        '</span><span>;</span><span>}</span>
    main pre: <span>73</span>
    sub pre: nil
    sub post: <span>32</span>
    main post: <span>73</span>
 res <span>=</span> ngx.location.capture<span>(</span>uri<span>)</span>
    ngx.location.capture<span>(</span><span>'/foo?a=1'</span>,
        <span>{</span> args <span>=</span><span>{</span> b <span>=</span><span>3</span>, c <span>=</span><span>':'</span><span>}</span><span>}</span><span>)</span>
    ngx.location.capture<span>(</span><span>'/foo?a=1&b=3&c=%3a'</span><span>)</span>
<span>location</span> /sub <span>{</span>
        content_by_lua <span>'
            ngx.ctx.foo = "bar";
        '</span><span>;</span><span>}</span><span>location</span> /lua <span>{</span>
        content_by_lua <span>'
            local ctx = {}
            res = ngx.location.capture("/sub", { ctx = ctx })
 
            ngx.say(ctx.foo);
            ngx.say(ngx.ctx.foo);
        '</span><span>;</span><span>}</span>
    bar
    nil
<span>location</span> /other <span>{</span>
        content_by_lua <span>'
            ngx.say("dog = ", ngx.var.dog)
            ngx.say("cat = ", ngx.var.cat)
        '</span><span>;</span><span>}</span>
 
    <span>location</span> /lua <span>{</span><span>set</span><span>$dog</span><span>''</span><span>;</span><span>set</span><span>$cat</span><span>''</span><span>;</span>
        content_by_lua <span>'
            res = ngx.location.capture("/other",
                { vars = { dog = "hello", cat = 32 }});
 
            ngx.print(res.body)
        '</span><span>;</span><span>}</span>
   dog = hello
    cat = 32
<span>location</span> /other <span>{</span><span>set</span><span>$dog</span><span>"$dog world"</span><span>;</span>
        echo <span>"$uri dog: $dog"</span><span>;</span><span>}</span>
 
    <span>location</span> /lua <span>{</span><span>set</span><span>$dog</span><span>'hello'</span><span>;</span>
        content_by_lua <span>'
            res = ngx.location.capture("/other",
                { copy_all_vars = true });
 
            ngx.print(res.body)
            ngx.say(ngx.var.uri, ": ", ngx.var.dog)
        '</span><span>;</span><span>}</span>
    /other dog: hello world
    /lua: hello
<span>location</span> /other <span>{</span><span>set</span><span>$dog</span><span>"$dog world"</span><span>;</span>
        echo <span>"$uri dog: $dog"</span><span>;</span><span>}</span>
 
    <span>location</span> /lua <span>{</span><span>set</span><span>$dog</span><span>'hello'</span><span>;</span>
        content_by_lua <span>'
            res = ngx.location.capture("/other",
                { share_all_vars = true });
 
            ngx.print(res.body)
            ngx.say(ngx.var.uri, ": ", ngx.var.dog)
        '</span><span>;</span><span>}</span>
    /other dog: hello world
    /lua: hello world
 res1, res2, res3 <span>=</span> ngx.location.capture_multi<span>{</span><span>{</span><span>"/foo"</span>, <span>{</span> args <span>=</span><span>"a=3&b=4"</span><span>}</span><span>}</span>,
        <span>{</span><span>"/bar"</span><span>}</span>,
        <span>{</span><span>"/baz"</span>, <span>{</span> method <span>=</span> ngx.HTTP_POST, body <span>=</span><span>"hello"</span><span>}</span><span>}</span>,
    <span>}</span>
 
    <span>if</span> res1.status <span>==</span> ngx.HTTP_OK <span>then</span>
        ...
    <span>end</span>
 
    <span>if</span> res2.body <span>==</span><span>"BLAH"</span><span>then</span>
        ...
    <span>end</span>
<span><em>-- construct the requests table</em></span><span>local</span> reqs <span>=</span><span>{</span><span>}</span><span>table.insert</span><span>(</span>reqs, <span>{</span><span>"/mysql"</span><span>}</span><span>)</span><span>table.insert</span><span>(</span>reqs, <span>{</span><span>"/postgres"</span><span>}</span><span>)</span><span>table.insert</span><span>(</span>reqs, <span>{</span><span>"/redis"</span><span>}</span><span>)</span><span>table.insert</span><span>(</span>reqs, <span>{</span><span>"/memcached"</span><span>}</span><span>)</span>
 
    <span><em>-- issue all the requests at once and wait until they all return</em></span><span>local</span> resps <span>=</span><span>{</span> ngx.location.capture_multi<span>(</span>reqs<span>)</span><span>}</span>
 
    <span><em>-- loop over the responses table</em></span><span>for</span> i, resp <span>in</span><span>ipairs</span><span>(</span>resps<span>)</span><span>do</span><span><em>-- process the response table "resp"</em></span><span>end</span>
    ngx.status <span>=</span> ngx.HTTP_CREATED
    status <span>=</span> ngx.status
<span><em>-- equivalent to ngx.header["Content-Type"] = 'text/plain'</em></span>
    ngx.header.content_type <span>=</span><span>'text/plain'</span><span>;</span>
 
    ngx.header<span>[</span><span>"X-My-Header"</span><span>]</span><span>=</span><span>'blah blah'</span><span>;</span>
    ngx.header<span>[</span><span>'Set-Cookie'</span><span>]</span><span>=</span><span>{</span><span>'a=32; path=/'</span>, <span>'b=4; path=/'</span><span>}</span>
    Set-Cookie: <span>a</span>=<span>32</span>; <span>path</span>=<span>/</span>
    Set-Cookie: <span>b</span>=<span>4</span>; <span>path</span>=<span>/</span>
<span>location</span> /test <span>{</span><span>set</span><span>$footer</span><span>''</span><span>;</span>
 
        <span>proxy_pass</span><span>http</span>://some-backend<span>;</span>
 
        header_filter_by_lua <span>'
            if ngx.header["X-My-Header"] == "blah" then
                ngx.var.footer = "some value"
            end
        '</span><span>;</span>
 
        echo_after_body <span>$footer</span><span>;</span><span>}</span>
<span>local</span> h <span>=</span> ngx.resp.get_headers<span>(</span><span>)</span><span>for</span> k, v <span>in</span><span>pairs</span><span>(</span>h<span>)</span><span>do</span>
    ...
<span>end</span>
<span>local</span> request_time <span>=</span> ngx.now<span>(</span><span>)</span> - ngx.req.start_time<span>(</span><span>)</span>
  ngx.<span>print</span><span>(</span>ngx.req.raw_header<span>(</span><span>)</span><span>)</span>
    GET /t HTTP/1.1
    Host: localhost
    Connection: close
    Foo: bar
  ngx.req.set_uri<span>(</span><span>"/foo"</span>, <span>false</span><span>)</span>
<span>rewrite</span> ^ /foo <span>break</span><span>;</span>
ngx.req.set_uri<span>(</span><span>"/foo"</span>, <span>true</span><span>)</span>
<span>rewrite</span> ^ /foo last<span>;</span>
ngx.req.set_uri_args<span>(</span><span>"a=3&b=hello%20world"</span><span>)</span>
ngx.req.set_uri_args<span>(</span><span>{</span> a <span>=</span><span>3</span>, b <span>=</span><span>"hello world"</span><span>}</span><span>)</span>
<span>location</span><span>=</span> /test <span>{</span>
        content_by_lua <span>'
            local args = ngx.req.get_uri_args()
            for key, val in pairs(args) do
                if type(val) == "table" then
                    ngx.say(key, ": ", table.concat(val, ", "))
                else
                    ngx.say(key, ": ", val)
                end
            end
        '</span><span>;</span><span>}</span>
   foo: bar
    bar: baz, blah
<span>location</span><span>=</span> /test <span>{</span>
        content_by_lua <span>'
            ngx.req.read_body()
            local args, err = ngx.req.get_post_args()
            if not args then
                ngx.say("failed to get post args: ", err)
                return
            end
            for key, val in pairs(args) do
                if type(val) == "table" then
                    ngx.say(key, ": ", table.concat(val, ", "))
                else
                    ngx.say(key, ": ", val)
                end
            end
        '</span><span>;</span><span>}</span>
<span><em># Post request with the body 'foo=bar&bar=baz&bar=blah'</em></span>
    $ curl <span>--data</span><span>'foo=bar&bar=baz&bar=blah'</span> localhost<span>/</span><span>test</span>
    foo: bar
    bar: baz, blah
<span>local</span> h <span>=</span> ngx.req.get_headers<span>(</span><span>)</span><span>for</span> k, v <span>in</span><span>pairs</span><span>(</span>h<span>)</span><span>do</span>
        ...
    <span>end</span>
    ngx.say<span>(</span><span>"Host: "</span>, ngx.req.get_headers<span>(</span><span>)</span><span>[</span><span>"Host"</span><span>]</span><span>)</span>
 ngx.req.set_header<span>(</span><span>"Content-Type"</span>, <span>"text/css"</span><span>)</span>
  ngx.req.set_header<span>(</span><span>"Foo"</span>, <span>{</span><span>"a"</span>, <span>"abc"</span><span>}</span><span>)</span>
    ngx.req.read_body<span>(</span><span>)</span><span>local</span> args <span>=</span> ngx.req.get_post_args<span>(</span><span>)</span>
  ngx.req.init_body<span>(</span><span>128</span><span>*</span><span>1024</span><span>)</span><span><em>-- buffer is 128KB</em></span><span>for</span> chunk <span>in</span> next_data_chunk<span>(</span><span>)</span><span>    do</span>
        ngx.req.append_body<span>(</span>chunk<span>)</span><span><em>-- each chunk can be 4KB</em></span><span>end</span>
    ngx.req.finish_body<span>(</span><span>)</span>
   ngx.exec<span>(</span><span>'/some-location'</span><span>)</span><span>;</span>
    ngx.exec<span>(</span><span>'/some-location'</span>, <span>'a=3&b=5&c=6'</span><span>)</span><span>;</span>
    ngx.exec<span>(</span><span>'/some-location?a=3&b=5'</span>, <span>'c=6'</span><span>)</span><span>;</span>
<span>location</span> /foo <span>{</span>
        content_by_lua <span>'
            ngx.exec("@bar", "a=goodbye");
        '</span><span>;</span><span>}</span>
 
    <span>location</span><span>@bar</span><span>{</span>
        content_by_lua <span>'
            local args = ngx.req.get_uri_args()
            for key, val in pairs(args) do
                if key == "a" then
                    ngx.say(val)
                end
            end
        '</span><span>;</span><span>}</span>
<span>local</span><span>table</span><span>=</span><span>{</span><span>"hello, "</span>,
        <span>{</span><span>"world: "</span>, <span>true</span>, <span>" or "</span>, <span>false</span>,
            <span>{</span><span>": "</span>, <span>nil</span><span>}</span><span>}</span><span>}</span>
    ngx.<span>print</span><span>(</span><span>table</span><span>)</span>
    ngx.status <span>=</span> ngx.HTTP_GONE
    ngx.say<span>(</span><span>"This is our own content"</span><span>)</span><span><em>-- to cause quit the whole request rather than the current phase handler</em></span>
    ngx.<span>exit</span><span>(</span>ngx.HTTP_OK<span>)</span>
<span>location</span><span>=</span> /async <span>{</span><span>keepalive_timeout</span><span>0</span><span>;</span>
        content_by_lua <span>'
            ngx.say("got the task!")
            ngx.eof()  -- a descent HTTP client will close the connection at this point
            -- access MySQL, PostgreSQL, Redis, Memcached, and etc here...
        '</span><span>;</span><span>}</span>

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

705

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

233

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

117

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

22

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

61

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

30

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

669

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

58

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Lua 5.3 中文开发手册
Lua 5.3 中文开发手册

共0课时 | 0人学习

Lua参考手册
Lua参考手册

共0课时 | 0.2万人学习

Lua教程
Lua教程

共22课时 | 19.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号