OpenResty 从入门到实战
温铭
OpenResty 软件基金会第一任主席,Apache APISIX 项目 VP
20903 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 52 讲
结束语 (1讲)
OpenResty 从入门到实战
15
15
1.0x
00:00/00:00
登录|注册

02 | 如何写出你的“hello world”?

调试工具
设置共享内存字典
OpenResty 需要指定版本的 OpenSSL、PCRE 库才能正常运行
官方仓库不愿意接受第三方维护的 OpenSSL、PCRE 和 zlib 包
需要手工对 OpenSSL 打上对应版本的补丁
需要自行解决外部依赖
步骤繁琐
使用 docker 镜像
源码编译
使用操作系统的包管理器
解决 Lua 代码可读性和可维护性问题的方法
启动 OpenResty 服务
修改 NGINX 的配置文件
创建工作目录
resty 的内部实现
resty 的功能
为什么不能直接从操作系统的官方仓库安装
不推荐源码安装的原因
多种安装方法
resty -e "ngx.say('hello world'); ngx.sleep(10)" &
resty -e "ngx.say('hello world')"
思考
更正式的 hello world
OpenResty CLI
OpenResty 的安装
OpenResty 的“hello world”程序
怎样写出你的“hello world”?

该思维导图由 AI 生成,仅供参考

你好,我是温铭。今天起,就要开始我们的正式学习之旅。
每当我们开始学习一个新的开发语言或者平台,都会从最简单的hello world开始,OpenResty 也不例外。让我们先跳过安装的步骤,直接看下,最简单的 OpenResty 程序是怎么编写和运行的:
$ resty -e "ngx.say('hello world')"
hello world
这应该是你见过的最简单的那种 hello world 代码写法,和 Python 类似:
$ python -c 'print("hello world")'
hello world
这背后其实是 OpenResty 哲学的一种体现,代码要足够简洁,也好让你打消“从入门到放弃“的念头。我们今天的内容,就专门围绕着这行代码来展开聊一聊。
上一节我们讲过,OpenResty 是基于 NGINX 的。那你现在是不是有一个疑问:为什么这里看不到 NGINX 的影子?别着急,我们加一行代码,看看 resty背后真正运行的是什么:
resty -e "ngx.say('hello world'); ngx.sleep(10)" &
我们加了一行 sleep 休眠的代码,让 resty 运行的程序打印出字符串后,并不退出。这样,我们就有机会一探究竟:
$ ps -ef | grep nginx
501 25468 25462 0 7:24下午 ttys000 0:00.01 /usr/local/Cellar/openresty/''1.13.6.2/nginx/sbin/nginx -p /tmp/resty_AfNwigQVOB/ -c conf/nginx.conf
终于看了熟悉的 NGINX 进程。看来,resty 本质上是启动了一个 NGINX 服务,那么resty 又是一个什么程序呢?我先卖个关子,咱后面再讲。
你的机器上可能还没有安装 OpenResty,所以,接下来,我们先回到开头跳过的安装步骤,把 OpenResty 安装完成后再继续。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

OpenResty 是一个基于 NGINX 的开发平台,本文以“hello world”为例,介绍了如何编写和运行最简单的 OpenResty 程序。文章首先展示了如何使用命令行工具 `resty` 来输出“hello world”,并解释了 `resty` 实际上是启动了一个 NGINX 服务。接着,文章详细介绍了 OpenResty 的安装方法,推荐使用包管理系统来安装,并解释了不推荐源码安装的原因。作者还分享了个人看法,强调了独立思考在技术领域的重要性。此外,文章还介绍了 OpenResty CLI 工具 `resty` 的功能和用法,包括共享内存字典的设置和查询,以及与调试工具的配合使用。 文章以简单的“hello world”程序为切入点,深入浅出地介绍了 OpenResty 的基本概念和使用方法,适合初学者快速了解 OpenResty 的特点和基本操作。通过一行简单的 `hello, world` 代码,延展到OpenResty 的安装和 CLI,并在最后启动了 OpenResty 进程,运行了一个真正的后端程序。其中, `resty` 是后续会频繁使用的命令行工具,而 OpenResty 的背后隐藏了非常多的文化和技术细节,展示了更全面、更立体的 OpenResty,而不仅仅是它对外暴露出来的 API。 最后,作者留下了一个思考题,提出了在 Lua 代码越来越多时如何保证代码的可读性和可维护性的问题,鼓励读者留言分享解决方法。整体而言,本文内容丰富,涵盖了 OpenResty 的基本概念和使用方法,同时引发了读者的思考和讨论。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《OpenResty 从入门到实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(60)

  • 最新
  • 精选
  • Geek_144c1d
    先将代码打包成`.lua` 文件 使用配置文件指令 `content_by_lua_file` 引用 类库代码 如果有 reqiure 的需求 可利用 `lua_package_path` 和 `lua_package_cpath` 设定类库加载目录

    作者回复: 👍

    2019-05-29
    32
  • cylim
    既然是基础课,应该提醒我们关闭server。 openresty -s quit -p `pwd` -c conf/nginx.conf 把lua代码写在其他文件上,然后带入nginx.conf使用。

    作者回复: 欢迎补充:)

    2019-05-29
    2
    19
  • helloworld
    编译安装PART1: 老师说的对,对于大多数项目来说都没有必要自己折腾编译安装,费时费力。不过有时候自己动手编译安装也是必须的,因为根据具体项目的需要,比如CDN项目,官方的默认编译选项就缺少一些必要的模块,比如ngx_cache_purge模块,如果需要对ipv6做支持,还需要nginx的--with-ipv6编译选项,等等。下面是我根据官方打包文件总结的centos平台下编译安装最新版本的openresty具体流程。centos6下完美运行,7也应该不是问题。给各位小伙伴在需要的时候参考,少走弯路,节省宝贵时间。 # 安装 pcre wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.42.tar.bz2 tar xjf pcre-8.42.tar.bz2 cd pcre-8.42 ./configure --prefix=/usr/local/openresty/pcre \ --disable-cpp --enable-jit \ --enable-utf --enable-unicode-properties make -j24 V=1 > /dev/stderr make install rm -rf /usr/local/openresty/pcre/bin rm -rf /usr/local/openresty/pcre/share rm -f /usr/local/openresty/pcre/lib/*.la rm -f /usr/local/openresty/pcre/lib/*pcrecpp* rm -f /usr/local/openresty/pcre/lib/*pcreposix* rm -rf /usr/local/openresty/pcre/lib/pkgconfig # 安装zlib cd /usr/local/src wget http://www.zlib.net/zlib-1.2.11.tar.xz tar xf zlib-1.2.11.tar.xz cd zlib-1.2.11 ./configure --prefix=/usr/local/openresty/zlib make -j24 \ CFLAGS='-O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -g' \ SFLAGS='-O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -g' > /dev/stderr make install rm -rf /usr/local/openresty/zlib/share/ rm -f /usr/local/openresty/zlib/lib/*.la rm -rf /usr/local/openresty/zlib/lib/pkgconfig/ # 安装openssl cd /usr/local/src wget https://www.openssl.org/source/openssl-1.1.0j.tar.gz wget https://raw.githubusercontent.com/openresty/openresty/master/patches/openssl-1.1.0d-sess_set_get_cb_yield.patch --no-check-certificate wget https://raw.githubusercontent.com/openresty/openresty/master/patches/openssl-1.1.0j-parallel_build_fix.patch --no-check-certificate tar zxf openssl-1.1.0j.tar.gz cd openssl-1.1.0j 继续见PART2

    作者回复: 👍

    2019-06-21
    13
  • aaron
    我使用yum安装了openresty之后并没有resty工具,我也没发现-p 'pwd'的意义何在,-c nginx.conf也启动不起来,最后我是用openresty -c /opt/geektime/conf/nginx.conf启动的。。。

    作者回复: centos 下需要单独安装:sudo yum install openresty-resty

    2019-05-30
    4
    5
  • HelloBug
    温铭老师,你好,有读者问vscode有没有openresty扩展,你说你用的lua扩展,这个是什么意思呢?还有老师你用的是什么IDE呀?

    作者回复: 我用的是 vs code,用的是 lua 和 luacheck 两个插件

    2019-06-04
    3
  • 业余草
    content_by_lua指令看起来非常怪!没有用{}

    作者回复: 嗯,可以用 content_by_lua_block

    2019-05-29
    3
  • 逗鹅冤
    老师好,有个问题请教一下 openresty -v nginx version: openresty/1.15.8.1 which openresty /usr/local/bin/openresty which resty /usr/local/bin/resty 这些都没问题 which luajit luajit not found luajit为什么没有呢

    作者回复: luajit 的可执行文件并没有被拷贝到/usr/local/bin目录下,所有找不到。这个是为了避免了已经安装的 luajit 冲突,毕竟 OpenResty 自带的 LuaJIT 是自己维护的版本

    2019-06-15
    2
  • HelloBug
    温铭老师好,假设操作系统中已经安装openssl/pcre/zlib,使用openresty的仓库地址,然后使用包管理器安装openresty,这个时候操作系统里有几个openssl/pcre/zlib呢?只有一个的话,是不是openresy维护的openssl/pcre/zlib?如果是的话,升级或者说安装操作系统中的更新版本的openssl(不是升级openresy维护的openssl),能否升级成功呢?如果升级成功,openresty执行的时候是否会出错呢?

    作者回复: openresty 维护的 openssl/pcre/zlib 都会安装在 /usr/local/openresty/ 目录下,并不会冲突。

    2019-06-04
    2
  • moshufenmo
    请问老师,开发openresty使用什么IDE? 一直在用sublime,但是lua文件一多,相互间引用关系就很难查看

    作者回复: 没有什么特别好用的,我用的是微软的 vscode

    2019-05-29
    2
  • 天天向上
    mac brew安装貌似很费劲 网上很多方法都报错

    作者回复: brew 安装也需要先指定 OpenResty 的仓库地址,具体请查看openresty.org 的文档

    2019-05-29
    2
收起评论
显示
设置
留言
60
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部