国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Apache下的Lua的配置

AlienZHOU / 3391人閱讀

摘要:找到含有的一行,去掉前邊的。可能你需要修改的默認文檔,在的位置按要求添加即可。寫文件首先我們寫一個的文件,作用就是會把我們的后綴修改為。

前言

對于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 on
RewriteCond %{REQUEST_FILENAME}   info
RewriteRule (.*).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
  end
end

local safe_replacements = {
  ["<"] = "<",
  [">"] = ">",
  ["&"] ="&",
}
local function safestring(...)
  return tostring(...):gsub("[<>&]", safe_replacements):gsub("
", "
") end local function emstring(...) return """.. safestring(...) ..""" end local 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(" ") end print "
".. key .." ".. value .."
" end print [[
]] 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), " ")), ["C package path"] = safestring(package.cpath:gsub(package.config:sub(3,3), " ")), -- 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 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
訪問Demo

打開Apache,訪問http://127.0.0.1/info.php 就能看到

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/35732.html

相關文章

  • 基于 Nginx 動態代理

    摘要:目前最常用的軟件反向代理服務器有和。基于實現動態代理為了實現動態代理方案,需要在反向代理服務器中增加定制的功能。同時,由于反向代理服務器需要處理大量的代理請求,因此會頻繁的讀取反向代理配置數據。 基于 Nginx 的動態代理 作者:趙波日期:2016 年 8 月 4 日 在實際應用中,遇到了這樣一個場景: 已有一個手機 APP 客戶端,需要在該 APP 客戶端中實現通過 Web 的形式...

    wean 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<