热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Apache上使用lua(lwt)

Lua作为一门领域语言确实很有特色,利用openresty项目我们可以方便地用lua脚本控制nginx服务器的行为,我不禁想看看在apache服务器中是否也有类似的项目,然后就发现了下面这个mod_lwt模块,那么来试试吧。首先下载mod_lwt项目的安装包,安装之前需要保证
Lua作为一门领域语言确实很有特色,利用openresty项目我们可以方便地用lua脚本控制nginx服务器的行为,我不禁想看看在apache服务器中是否也有类似的项目,然后就发现了下面这个mod_lwt模块,那么来试试吧。
首先下载mod_lwt项目的安装包,安装之前需要保证系统环境中已经安装了apache,lua以及liblua,后者可以在lua官网上下载liblua.so文件,这里使用的是5.1版本(其实只需要去掉lua.c文件编译也可得到liblua.so,为了省事我就直接下载别人编译好的了)。
安装mod_lwt,命令如下
cd mod_lwt
make
make install
安装过程会在/usr/local/share/lua/5.1/这个目录下生成httpd.lua以及httpd/wsapi.lua两个文件
修改apache配置文件,在相应位置添加如下内容 AddHandler lwt .lua
AddHandler lwt-wsapi .ws
LoadModule lwt_module                     /usr/lib64/apache2/mod_lwt.so
然后调用如下命令启动模块,重启服务器 a2enmod lwt
apache2ctl restart
安装模块就已经完成了,接下来我们用官网的测试脚本test.lua试试,放在网站根目录
require "httpd"
local request_fields = { "uri", "protocol", "hostname", "path", "path_info", "args",
                "method", "filename", "filedir", "user", "auth_type",
                "local_ip", "remote_ip" }
request, args = ...
httpd.set_content_type("text/plain; charset=utf8")
httpd.write("Hello Lua World\r\n")
for _, key in ipairs(request_fields) do
        httpd.write(key .." -> " .. (request[key] or "(not set)") .. "\r\n")
end
然后就可以用浏览器访问test.lua脚本,可以看到如下效果,是不是很类似php脚本动态生成网页啊,呵呵



可见用lua已经可以方便地操作apache服务器的行为,获取数据,产生输出。项目主页上提供了一些基本的http的api供开发者使用
httpd.pairs (apr_table)
httpd.set_status (status)
httpd.set_content_type (content_type)
httpd.add_header (name, value [, err_header])
httpd.add_COOKIE (name [, value [, expires [, path [, domain [, secure [, httponly]]]]]])
httpd.write_template (filename [, flags [, file]])
httpd.escape_uri (string)
httpd.escape_xml (string)
httpd.escape_js (string)
httpd.input
httpd.output
httpd.read (...)
httpd.write (...)
httpd.debug (message)
httpd.notice (message)
httpd.err (message)
httpd.redirect (request, uri, status)
httpd.dump (value)
httpd.match (path_info, ...)
下面还是创建个脚本感受一下Hello World的效果。
require "httpd" -- Import the httpd module
request, args = ... -- Get the request and args values passed to the script
name = args.name or "Unknown" -- Process arguments
httpd.set_content_type("text/plain") -- Set content type
httpd.write("Hello, " .. name .. "!\r\n")
httpd.write("Welcome to " .. request.hostname .. "!\r\n")
用浏览器访问脚本hello.lua?name=ciaos,会输出如下结果 Hello, ciaos!
Welcome to 10.6.2.245!
LWT将业务逻辑独立到lua脚本中来,我们就可以使用lua来实现自己的需求了,同时LWT提供可选的Lua模块用来访问数据库和缓存,真是不错的语言啊。(网上有人测试LWT比python脚本的性能提升120%左右,未查实)

功能特性(官方说明):

Apache module. LWT provides an Apache HTTP server module that handles requests by invoking Lua scripts. The module provides the core functionality for creating web applications.
Template engine. LWT provides a template engine that blends Lua with HTML/XML. The engine supports substitutions and logic in a way that is natural to both Lua and HTML/XML. This makes it easy to develop web applications with a clean separation of UI logic in Lua and layout in HTML.
Full request control. LWT provides full control over web requests, including request status, content type, input and output. This faciliates the creation of JSON web services, and other uses of HTTP.
File uploads. LWT supports HTTP file uploads from a web browser.
WSAPI. LWT supports the WSAPI standard, and can be used to run WSAPI applications directly in the Apache HTTP server.
Databases. The IS module supports the access to information system in an SQL injection safe way. Currently, the module supports MySQL, Sybase, SQL Server and SQLite.
Caching. The cache module supports the use of caches, currently memcached.
除了LWT以外,还有一个模块mod_plua也是将lua作为脚本嵌入到html代码中,大家可以自行试试。

推荐阅读
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
  • 深入解析Nginx中的Location指令及其属性
    本文将详细探讨Nginx配置文件中关键的location指令,包括其三种匹配方式(精准匹配、普通匹配和正则匹配),以及如何在实际应用中灵活运用这些匹配规则。此外,还将介绍location下的重要子元素如root、alias和proxy_pass,并解释相关参数的使用方法。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 本文详细探讨了在使用Python、uWSGI和nginx配置时遇到的权限问题,并提供了具体的解决方案。 ... [详细]
author-avatar
厉害了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有