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 前端开发入门一 1相关推荐

  1. openresty 前端开发入门五之Mysql篇

    2019独角兽企业重金招聘Python工程师标准>>> openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysq ...

  2. openresty 前端开发入门四之Redis篇

    2019独角兽企业重金招聘Python工程师标准>>> 这章主要演示怎么通过lua连接redis,并根据用户输入的key从redis获取value,并返回给用户 操作redis主要用 ...

  3. openresty 前端开发入门三之JSON篇

    这章主要介绍一下,lua怎么返回一个json字符串,怎么把一个table转成json字符串,又怎么把一个json字符串转成json 其实很简答,直接使用cjson库的encode.decode方法即可 ...

  4. openresty json mysql_openresty 前端开发入门五之Mysql篇

    openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户 操作mysql主要用到了lua-resty-my ...

  5. Web前端开发入门之网页制作三要素!

    Web前端开发是由网页制作演变而来的,主要由HTML.CSS.JavaScript三大要素组成.专业的Web前端开发入门知识也一定会包含这些内容,今天小千就给大家简单介绍一下. HTML,超文本标记语 ...

  6. 支付宝前端推出《Web前端开发入门手册》

    web前端教程 用大白话,来讲编程 近日,支付宝前端团队写的<Web前端开发入门手册>对外公开了,原本是用于内部培训使用,现在对外公开了. 这本手册是初学者的福音,它的受众群体是前端小白, ...

  7. Web前端开发入门学习分享

    Web前端开发入门学习分享 1:如何开始学习Web前端 首先你需要学习html的各个标签,掌握其用法和规范,明白其作用. 开始学习css的使用,你先学习在html页面中为标签增加css样式,其次是将c ...

  8. web前端开发入门(一)

    web前端开发入门(一) 前端开发入门 HTML/CSS/JavaScript JavaScript 总结 思考和实践 前端开发入门 首先必须掌握 HTML/CSS/JavaScript 这三大基础技 ...

  9. Web前端html5+css3前端开发入门学习笔记

    文章目录 前言 HTML 认识HTML 1. 网页组成和本质 2.了解浏览器 3.web标准 4.HTML感知 5.HTML骨架 6.编译软件vscode的简介和使用 7.注释 8.标签组成和关系 9 ...

  10. html在线时间统计图,Web前端开发入门,HTML一张图学会,还在看数小时视频浪费时间?...

    同样的地方,同样的时间,又跟大家见面了.想学习前端朋友可以加我们的前端学习群:617327703 很多人问我,前端开发入门怎么开始?这里呢,先看下我之前发的文章有大体的概括思路跟流程在里面.今天主要分 ...

最新文章

  1. memset初始化内存
  2. mysql标准化存储结构_Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结  mysql...
  3. char a[]和char *a的比较,数组名,数组首地址,a,a,a[0]
  4. java操作文件爱女_Java的IO操作---File类
  5. 人生苦短,Python值得!这些Pandas隐藏小技巧你知道吗?
  6. 一线城市夫妻“双城记”:带板凳上地铁,从江苏坐到江苏路站
  7. sqlserver聚合索引(clustered index) / 非聚合索引(nonclustered index)的理解
  8. 中继器系列:中继器增删改查
  9. 根据题目完成以下50道SQL语句
  10. 办公室最经常用到的WIFI ip地址设置(window10)
  11. Android-跳转开启个人热点页面
  12. jQuery实现常见的轮播图效果
  13. el-table合计
  14. c语言实现MD5计算
  15. Angelababy 首攻好莱坞 获封最闪亮新星
  16. 乔布斯与他的完美主义
  17. 3.12-3.14生产者和消费者模型、条件变量、信号量
  18. 大公司之小和小公司之大
  19. NLP:《ChatGPT: Optimizing Language Models for Dialogue一种优化的对话语言模型》翻译与解读
  20. Ubuntu 安装Flatabulous扁平化风格的桌面主题

热门文章

  1. jquery ajax请求方式与提示用户正在处理请稍等,等待数据返回时loading的显示
  2. activity的跳转
  3. 深入分析windows和Linux动态链接库的应用异同[转]
  4. mmo游戏开发应在profile下运行,才能保证正式运行不卡
  5. 062 函数进阶小结
  6. 002.FTP配置项详解
  7. centos6.9安装虚拟机kvm
  8. BZOJ - 4568 幸运数字
  9. 构建之法:第八次心得
  10. 最近学到一些linq和面向对象的经验分享