openresty 前端开发入门一
OpenResty ™ 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
以上是从官网拷过来的原话,我们通过写一个hello world,来走进openresty开发之旅
下载地址
http://openresty.org/cn/download.html
有的人不会下windows版,所以我这里直接给出下载地址,现在是最新版本,学会了之后,可以自己下载
mac、linux 平台
https://openresty.org/download/openresty-1.11.2.2.tar.gz
windows平台
https://openresty.org/download/openresty-1.11.2.2-win32.zip
关于安装
mac、linux安装看这里 http://openresty.org/cn/installation.html
windows 直接之后直接启动就可以了,不用安装
安装完之后别着急启动
开始写代码了
打开nginx目录下的conf/nginx.conf文件
在server中新增以下代码
location /hello {
default_type text/html;
content_by_lua '
ngx.say("<p>hello, world</p>")
';
}
类似这样
http {
server {
listen 80;
server_name localhost;
location / {
default_type text/html;
content_by_lua '
ngx.say("<p>hello, world</p>")
';
}
}
}
现在启动nginx,然后访问 http://localhost/hello,不出意外的话应该就OK了,如果你之前启动了,那么需要reload一下,nginx的基本操作这里就不介绍了
通过ngx.say 我们可以往客户端输出响应文本,在整个request周期内可以多次调用,接受的参数是字符串,如果输出table会报错
还有一个输出的函数是ngx.print,同样也是输出响应内容
这里有一个坑,就是调用ngx.say会在输出我们的内容之后会额外输出一个换行,但是ngx.print就不会,我之前一个同事用lua输出了一个200,然后前端用ajax调用,判断是否200,死活是false,看输出的内容就是200,差点怀疑人生,幸亏我比较机智,直接查看ajax请求源码,发现行号多了一行,就是那个换行,如果不仔细根本看不出来,这个坑被我一个同事踩了
上面的代码直接把lua代码写到nginx配置里面了,维护起来不是很方便,而且写代码的时候也没有语法高亮,提示这些,比较蛋疼,我们把它拿出来一个单独的文件,并放到一个nginx下面单独的lua目录下,方便管理
lua/hello.lua
ngx.say("<p>hello, world</p>")
nginx.conf 改成这样
location / {
default_type text/html;
content_by_lua_file lua/hello.lua;
}
然后nginx reload 一下,再看效果,应该是一样的
我们修改一下hello.lua,在hello,world后面加一个!号,刷新浏览器发现没有任何变化,这是因为lua代码被缓存了,这就导致我们修改代码,就必须reload nginx 在能看到效果,如果是这样,那简直要疯了,其实要解决这个问题很简单,只要在nginx.conf里面把lua缓存给禁止掉就行了,当然在生产线上一定要把缓存打开,不然效果大打折扣
禁止lua缓存
server {
listen 80;
server_name localhost;
lua_code_cache off; # 这个可以放在server下面,也可以凡在location下面,作用的范围也不一样,为了简单直接放这里了
location / {
default_type text/html;
content_by_lua_file lua/hello.lua;
}
}
改完之后reload一下nginx,这里重点声明一下修改nginx配置必须要reload,否则是没有效果的
现在我们再改hello.lua,然后刷新浏览器就会发现可以实时生效了
观察以上代码其实还会发现一个问题,如果我们想要处理很多个请求,那不是要在nginx里面配置N个location吗,我们肯定不会这么做,这里可以通过nginx正在匹配动态指定lua文件名,即可完成我们的需求,后台我再介绍如何打造一个属于我们的mvc轻量级框架,这里我们先这么做
location 改成这样
location ~ /lua/(.+) {
content_by_lua_file lua/$1.lua;
}
reload nginx
这个时候访问hello world的请求url就变成了
http://localhost/lua/hello 了
同理,我们在lua文件里面创建一个welcome.lua的话,就可以通过
http://localhost/lua/welcome 来访问了
以此类推,我们就可以通过新增多个文件来处理不同的请求了,而且修改了还能实时生效,剩下的就是完成业务代码了,比如调一下redis返回数据,或者mysql之类的,有悟性的同学在这里已经可以做很多事情了
openresty 前端开发入门一的更多相关文章
- openresty 前端开发入门五之Mysql篇
openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户 操作mysql主要用到了lua-resty-my ...
- openresty 前端开发入门六之调试篇
大多数情况下,调试信息,都可以通过ngx.say打印出来,但是有的时候,我们希望打印调试日志,不影响到返回数据,所以系统打印到其它地方,比如日志文件,或者控制台 这里主要用到一个方法就是ngx.log ...
- openresty 前端开发入门四之Redis篇
这章主要演示怎么通过lua连接redis,并根据用户输入的key从redis获取value,并返回给用户 操作redis主要用到了lua-resty-redis库,代码可以在github上找得到 而且 ...
- openresty 前端开发入门三之JSON篇
这章主要介绍一下,lua怎么返回一个json字符串,怎么把一个table转成json字符串,又怎么把一个json字符串转成json 其实很简答,直接使用cjson库的encode.decode方法即可 ...
- openresty 前端开发入门二
这一章主要介绍介绍怎么获取请求参数,并且处理之后返回数据 我们知道http请求通常分为两种,分别是GET,POST,在http协议中,GET参数通常会紧跟在uri后面,而POST请求参数则包含在请求体 ...
- 鸿蒙OS前端开发入门指南:网络图片_Image渲染网络图片
目录: 1.开启明文传输 2.权限申请 3.引入http插件 4.案例展示 5.<鸿蒙OS前端开发入门指南>文章合集 开启明文传输 在config.json配置文件添加如下配置(如果不开启 ...
- openresty 前端开发序
还记得第一次尝试前后端分离的时候,是使用nginx + react 构建的spa应用,后端是java,主要处理业务逻辑逻辑部分,返回json数据,在nginx里面配置好html + js纯静态文件,再 ...
- openresty 前端开发进阶一之http后端
做前端开发,大多数情况下,都需要跟后端打交道,而最常见的方式则是通过http请求,进行通信. 在openresty中,通过http跟后端整合通信的方式又很多种,各有各的好处,可以根据情况交叉使用 1. ...
- web前端开发入门全套学习方法路径,兼职在家做网站也能月入上万!
前端学习路径 1.WEB前端快速入门 在本阶段,我们需要掌握 HTML 与 CSS 基础,当然,也包含 H5 和 C3 的新特性.这个部分内容非常简单,而且非常容易掌握.相信你也更愿意学习这个部分,毕 ...
随机推荐
- 直播推流端弱网优化策略 | 直播 SDK 性能优化实践
弱网优化的场景 网络直播行业经过一年多的快速发展,衍生出了各种各样的玩法.最早的网络直播是主播坐在 PC 前,安装好专业的直播设备(如摄像头和麦克风),然后才能开始直播.后来随着手机性能的提升和直播技 ...
- IP报头
位字段的值设置为二进制的0100表示IP版本4(IPv4).设置为0110表示IP版本6(IPv6) 位,它表示32位字长的IP报头长度,设计报头长度的原因是数据包可选字段大小会发生变化.IP ...
- Struts的文件上传下载
Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...
- 【C#】获取网页内容及HTML解析器HtmlAgilityPack的使用
最近经常需要下载一些东西,而这个下载地址又会经过层层跳转,每个页面上都有很多广告,烦不胜烦,所以做了一个一键获得最终下载地址的小工具.使用C#,来获取网页内容,然后通过HtmlAgilityPack获 ...
- VS2012+EF6+Mysql配置心路历程
为了学习ORM,选择了EntityFramework,经历了三天两夜的煎熬,N多次错误,在群里高手的帮助下,终于成功,现在将我的心路历程记录下来,一是让自己有个记录,另外就是让其它人少走些弯路. 我的 ...
- .Net程序在linux mono环境和WindowsServer上执行测试对比
最近研究了一下mono,想把windows上写的.Net程序移植到linux上跑.网上有资料说Linux上mono执行.Net程序效率比Windows高,本着实证的态度,只有实际验证过才有说服力. 写 ...
- iOS开发系列文章(持续更新……)
iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...
- (转)C++语言的15个晦涩特性
原文链接: Evan Wallace 翻译: 伯乐在线- 敏敏 译文链接: http://blog.jobbole.com/54140/ 这个列表收集了 C++ 语言的一些晦涩(Obscure)特 ...
- 架构 Roadmap 笔记分享
虽然我们的架构不是开源的,不过一些笔记可以愿意公开和大家讨论一下,我相信不少人在和我们干着同样的事情,那不如一块儿交流一下,这样我们可以更快. 这里前端,后端都有,前端我们用的是 avalon js, ...
- ABP(现代ASP.NET样板开发框架)系列之21、ABP展现层——Javascript函数库
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.NET Boilerplate Project ...