博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apache下的Lua的配置
阅读量:6227 次
发布时间:2019-06-21

本文共 5412 字,大约阅读时间需要 18 分钟。

前言

对于Apdche这个东西,绝大多数人都是非常熟悉的。很多人都会诟病这个Apache,说它效率不高而且非常消耗资源,然后会建议用Nginx。这些不能否认,但是我还是很喜欢Apache,因为它比较稳定。

Apache关于Lua我不知道是哪一个版本编译进去了的,但是最新版的是有的。在Apache的bin目录下有一个lua51.dll很明显,这个是Lua5.1版本的,目前Lua已经到了5.3版本了,如果你想追求新的版本的话,你可以自己把apache编译一次。然后还有,在Apache的modules目录下有一个mod_lua.so是开启Apache和Lua“通信桥梁”的文件。

修改配置文件

  • 找到含有mod_lua.so的一行,去掉前边的#即可。
  • 找到含有mod_rewrite.so的一行,去掉前边的#。
  • 可能你需要修改Apache的默认文档,在DirectoryIndex的位置按要求添加即可。
  • 将AllowOverride后边的None写为All,表示在整台服务器上都开启了URL重写。

写Demo文件

  • 首先我们写一个.htaccess的文件,作用就是会把我们的Lua后缀修改为php。,内容如下:
RewriteEngine onRewriteCond %{REQUEST_FILENAME}   infoRewriteRule (.*).php    $1.lua [NC]
  • 新建一个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  endendlocal safe_replacements = {  ["<"] = "<",  [">"] = ">",  ["&"] ="&",}local function safestring(...)  return tostring(...):gsub("[<>&]", safe_replacements):gsub("\n", "
\n")endlocal function emstring(...) return """.. safestring(...) .."""endlocal function print_info(info) print [[ mod_lua info

mod_lua

]] for group, settings in pairs(info) do print('

'.. group .. "

") print [[
]] for key, value in pairs(settings) do print("
\n") end print "
".. key .." ".. value .."
\n" end print [[
]]endlocal 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 .. "
    " for field, v in pairs(value) do str = str .. "
  • " .. safestring(field) .. " (" if type(v) == "string" then str = str .. emstring(v) else str = str .. safestring(v) end str = str .. ")
  • " end str = str .. "
" 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 = "
    " for key, value in apr_table.pairs(value) do list = list .. "
  • " .. safestring(key) .. " (" .. emstring(value) .. ")
  • " end rinfo[field] = tostring(req[field]) .. list .. "
" 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 infoendfunction 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.OKend

访问Demo

打开Apache,访问 就能看到

转载地址:http://hqnna.baihongyu.com/

你可能感兴趣的文章
Swift 注释
查看>>
应对Memcached缓存失效,导致高并发查询DB的几种思路
查看>>
PLSQL_性能优化系列14_Oracle High Water Level高水位分析
查看>>
A Game with Colored Balls
查看>>
使用哈希加盐法来为密码加密【转】
查看>>
fastjson经常用法
查看>>
Java虚拟机工作原理具体解释
查看>>
建立网站的全套流程与详细解释
查看>>
PHP会员找回密码功能实现实例介绍
查看>>
iPhone 6 屏幕揭秘
查看>>
一年成为Emacs高手(像神一样使用编辑器)
查看>>
WPF使用扩展屏幕
查看>>
透过【百度地图API】分析双闭包问题
查看>>
iis配置网址(主机名)
查看>>
禁止IE7的页面缩放功能
查看>>
把DATATABLE,DS中的内容用HTML的方式显示
查看>>
了解SQL Server锁争用:NOLOCK 和 ROWLOCK 的秘密
查看>>
聊聊单元測试(一)——EasyMock
查看>>
关于Git的礼节
查看>>
使用 Chrome 来调试你的 Android App
查看>>