`

windows 上 搭建 apache + lua 运行环境

阅读更多

为了搭建apache - lua 好不容易从网上下载到了 mod_lua.so 的windows版本
但是始终搞不成,找了N天才发现 这玩意要 apache 2.3+的版本支持, 此处 


但是 apache官方并无 2.3+以上版本 windows 的版本下载,终于找到一个位置
http://www.apachelounge.com/download/

 

下载了 32位的 apache 2.4的版本,其中便内置了  mod_lua.so o(∩_∩)o 哈哈

 

在 httpd.conf中开启这个模块,然后新增一行 AddHandler lua-script .lua

 

在 htdocs下新增 2个lua脚本文件来进行测试即可

 

info.lua

-- Extend tostring to report function type (C or Lua)
do
  local type, tostr = type, tostring
  function tostring(obj)
    local type, val = type(obj), tostr(obj)
    if type == "function" then
      type = pcall(coroutine.create, obj) and "Lua " or "C " -- coroutines cannot start at a C function
      return type .. val
    else
      return val
    end
  end
end

local safe_replacements = {
  ["<"] = "&lt;",
  [">"] = "&gt;",
  ["&"] ="&amp;",
}
local function safestring(...)
  return tostring(...):gsub("[<>&]", safe_replacements):gsub("\n", "<br/>\n")
end
local function emstring(...)
  return "&quot;<em>".. safestring(...) .."</em>&quot;"
end

local function print_info(info)
  print [[
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title>mod_lua info</title>
    <style type="text/css">
      body {
        background-color: #eef;
	color: black;
	font-family: sans-serif;
      }
      table {
        border-collapse: collapse;
	text-align: left;
	margin-left: auto;
	margin-right: auto;
      }
      table.head th {
        vertical-align: middle;
	background-color: #99c;
      }
      div.center {
        text-align: center;
      }
      h1 {
        margin: 0;
	padding: 0.3em 0;
      }
      td, th {
        border: 1px black solid;
	vertical-align: baseline;
	font-size: 75%;
      }
      th {
        background-color: #ccf;
      }
      td {
        background-color: #ccc;
      }
      ul {
        list-style: square;
	margin: 0;
	padding-left: 2em;
      }
    </style>
  </head>
  <body>
    <div class="center">
      <table class="head" width="600">
        <tr> <th><h1>mod_lua</h1></th> </tr>
      </table>
]]
  for group, settings in pairs(info) do
    print('<h2><a name="'.. group:gsub("[^a-zA-Z]", "") ..'">'.. group .. "</a></h2>")
    print [[
      <table width="600">
]]
    for key, value in pairs(settings) do
      print("<tr> <th>".. key .."</th> <td>".. value .."</td> </tr>\n")
    end
    print "</table>\n"
  end
  print [[
    </div>
  </body>
</html>
]]
end

local function compile_info(req)
  local info = {}
  do -- Lua compile options
    local dump = string.dump(function() end)
    local gc_pause = collectgarbage("setpause", 1); collectgarbage("setpause", gc_pause)
    local gc_stepmul = collectgarbage("setstepmul", 2); collectgarbage("setstepmul", gc_stepmul)
    info["Lua configuration"] = {
      -- Bytecode header is undocumented, see luaU_header in lundump.c
      Version = ("%i.%i"):format(math.floor(dump:byte(5) / 16), dump:byte(5) % 16),
      Endianness = dump:byte(7) == 1 and "little" or "big",
      int = dump:byte(8)*8 .. " bit integer",
      size_t = dump:byte(9)*8 .. " bit integer",
      ["VM instruction"] = dump:byte(10)*8 .. " bit integer",
      Number = dump:byte(11)*8 .. " bit " .. (dump:byte(12) == 1 and "integer" or "float"),
      -- package.config is undocumented, see luaopen_package in loadlib.c
      ["Path seperator"] = safestring(package.config:sub(1,1)),
      ["Lua package path"] = safestring(package.path:gsub(package.config:sub(3,3), "\n")),
      ["C package path"] = safestring(package.cpath:gsub(package.config:sub(3,3), "\n")),
      -- Garbage collection values _are_ documented :)
      ["GC count"] = ("%.0f bytes"):format(collectgarbage"count" * 1024),
      ["GC pause"] = ("%.0f%%"):format(gc_pause),
      ["GC step multiplier"] = ("%.0f%%"):format(gc_stepmul),
    }
  end
  do -- Globals
    local g = {}
    for key, value in pairs(getfenv(0)) do
      local typev = type(value)
      local str
      if typev == "table" then
        str = safestring(value)
        if value ~= getfenv(0) then -- don't recursively follow _G
          str = str .. "<ul>"
            for field, v in pairs(value) do
              str = str .. "<li>" .. safestring(field) .. " ("
              if type(v) == "string" then
                str = str .. emstring(v)
              else
                str = str .. safestring(v)
              end
              str = str .. ")</li>"
            end
          str = str .. "</ul>"
        end
      elseif typev == "string" then
        str = emstring(value)
      else
        str = safestring(value)
      end
      g[safestring(key)] = str
    end
    info.Globals = g
  end
  do -- Request object
    local rinfo = {}
    for _, field in pairs{"puts", "write", "document_root", "parseargs", "parsebody", "debug", "info", "notice",
    "warn", "err", "crit", "alert", "emerg", "add_output_filter", "assbackwards", "status", "protocol", "range",
    "content_type", "content_encoding", "ap_auth_type", "unparsed_uri", "user", "filename", "canonical_filename",
    "path_info", "args", "hostname", "uri", "the_request", "method", "headers_in", "headers_out"} do
      local value = req[field]
      if type(value) == "userdata" and apr_table and apr_table.pairs then
        local list = "<ul>"
        for key, value in apr_table.pairs(value) do
          list = list .. "<li>" .. safestring(key) .. " (" .. emstring(value) .. ")</li>"
        end
        rinfo[field] = tostring(req[field]) .. list .. "</ul>"
      elseif type(value) == "string" then
        rinfo[field] = emstring(req[field])
      else
        rinfo[field] = safestring(req[field])
      end
    end
    info.Request = rinfo
  end
  do -- Arguments (query string)
    local args = req:parseargs()
    local args_clean = {}
    for key, value in pairs(args) do
      args_clean[safestring(key)] = emstring(value)
    end
    if next(args_clean) then
      info["Query string"] = args_clean
    end
  end
  return info
end

function handle(r)
  -- setup the environment
  r.content_type = "text/html"
  r.headers_out["X-Powered-By"] = "mod_lua; " .. _VERSION
  print = function(s) return r:write(tostring(s)) end

  -- run the main script
  local info = compile_info(r)
  print_info(info)

  -- finish
  return apache2.OK
end

 hello_world.lua

require "apache2"

function handle(r)
  r.content_type = "text/html"
  r:write "Hello World from <strong>mod_lua</strong>."
  return apache2.OK
end

 

如果要配置 apache2.4 + php 请参见我上一个帖子

 

分享到:
评论

相关推荐

    idea+openresty+lua运行nginx服务器.zip

    idea+openresty+lua运行nginx服务器, 代码和软件都有, 参考资料: https://blog.csdn.net/dongyuxu342719/article/details/90413904

    luajava最新源码+jar包+动态链接库+lua编程环境

    史上最全luajava最新源码+jar包+动态链接库+lua编程环境 史上最全luajava最新源码+jar包+动态链接库+lua编程环境 史上最全luajava最新源码+jar包+动态链接库+lua编程环境

    idea openrestry+nginx+lua搭建企业级开发环境

    "Idea OpenResty + Nginx + Lua" 的组合提供了一种强大的解决方案,它允许开发者利用 IntelliJ IDEA(Idea)作为集成开发环境,OpenResty(一个扩展了 Nginx 的版本)作为服务器平台,以及 Lua 语言进行高性能的脚本...

    Idea+lua 开发环境搭建

    4. **LuaForWindows**: LuaForWindows是Windows平台上的一个Lua发行版,它集成了lua.exe和luac.exe等工具,方便进行lua脚本的编译和运行。下载并解压LuaForWindows,将其添加到系统的PATH环境变量中,以便Idea可以...

    nginx+lua+redis 集群 连接插件和脚本

    本资源包“nginx+lua+redis集群 连接插件和脚本”正是为了解决这三者之间的协同工作,特别是针对原插件没有密码功能的问题进行了改进,使得安全性得到了提升。 首先,Nginx是一款轻量级的Web服务器/反向代理服务器...

    支持modbus总线+lua的IEC61499运行时

    软件是基于开源项目4diac里面的forte源码进行编译的,且集成了modbus总线、Lua脚本解析,与4diac官网下载的4diac ide可以配合使用。IEC61499是一个分布式的PLC编程标准,可以作为IEC61131-3的补充。

    nginx+lua+redis通过匹配客户端ip进行灰度发布

    nginx+lua+redis通过匹配客户端ip进行灰度发布 本文将讲述如何使用nginx、lua和redis来实现灰度发布,通过匹配客户端IP来实现灰度发布。灰度发布是一种常见的软件发布方式,它允许开发者在生产环境中发布新的版本,...

    nginx+lua+redis实现token验证

    本文将深入探讨如何利用`nginx+lua+redis`来实现`token`验证,以确保只有经过授权的用户才能访问受保护的资源。 首先,让我们理解`token`验证的基本原理。`token`验证是一种身份验证机制,它允许客户端通过提供一个...

    Nginx+upload+lua实现简单文件上传服务

    本教程将详细解析如何使用Nginx、upload模块以及lua来搭建一个简单的文件上传系统。 首先,我们需要了解Nginx的ngx_http_upload_module模块,这是一个用于处理HTTP POST请求中的文件上传的第三方模块。它允许我们在...

    跟我学Nginx+Lua开发_nginxlua原理_nginx_

    《跟我学Nginx+Lua开发》这本书主要探讨了如何利用Nginx与Lua进行高效、灵活的Web服务开发。Nginx以其高性能、反向代理和负载均衡能力而闻名,而Lua则是一种轻量级的脚本语言,两者结合可以实现强大的服务器端功能。...

    Notepad++ 的lua.xml 语法高亮和自动补全插件

    Notepad++ 的lua 语法高亮和自动补全插件 下载后放到NotePad++的安装目录下:Notepad++\plugins\APIs\里即可

    Nginx+lua通过url传参的方式实现动态代理

    - **OpenResty**:是一个基于Nginx与Lua的高性能Web平台,它极大地简化了在Nginx上编写复杂的Web应用的过程。OpenResty提供了强大的Lua API,可以用来处理HTTP请求和响应,实现复杂的功能逻辑。 #### 需求分析 本...

    nginx+lua+docker+docker-compose实现简单服务分发

    nginx+lua+docker+docker-compose实现简单服务分发

    Nginx+Lua+GraphicsMagick图片缩略图

    Nginx+Lua+GraphicsMagick实现动态生成指定尺寸的图片

    visual c++ HGE游戏引擎+Lua脚本的结合使用.zip

    Lua脚本的执行通常在C++中通过调用`HGE-&gt;Lua-&gt;DoFile()`来完成,这样可以在运行时动态加载和执行脚本。 四、Lua脚本在游戏中的应用 1. 游戏逻辑:Lua脚本可以用来编写游戏规则,比如角色的动作、敌人AI、碰撞检测...

    programming+in+lua

    programming+in+luaprogramming+in+lua

    Lua中文教程pdf+LuaForWindows

    分享一个Lua语言的中文pdf文档,有书签的,里面还有lua的运行环境,希望更多的人可以来学习Lua这一优美小巧的语言。 安装方法:安装LuaForWindows即可,不停点下一步,安装完后,桌面上会出现Lua图标和SciTE编辑器...

    ngx+lua实现前端缓存应用实例分享

    ngx+lua实现前端缓存应用实例分享

Global site tag (gtag.js) - Google Analytics