如何用 openresty + lua 快速搭建一个简单网站

1.5k 词

最近在折腾 OpenResty,OpenResty 就不用多介绍了,这方面国内质量好的资料也不多,
如果非要选一个入门级别的资料,自然是《OpenResty 最佳实践》。断断续续看了一些 Lua 的语法和 OpenResty 基础,
就想做点什么练练手。碰巧某天。同事介绍了几个 OpenResty 的 lua 库,一看刚刚好,可以做来搭个简单的网站。
那么我们就开始吧…

安装 OpenResty

在上一篇文章,记录了几个 Mac 安装 openresty 的几个坑。有兴趣的可以看看,不多介绍了。

搭建项目

项目目录很简单,刚刚介绍的那个 lua 库 lua-resty-template,看库的名字就知道这是个模板相关的库,主要是提供模板渲染的功能。
有一些自己的模板语法,这和其他语法的模板语法一样的。

项目目录结构如下:

1
.
├── conf
│   └── nginx.conf
├── html
│   ├── _base.html
│   └── view.html
├── lua_file
│   └── content.lua
├── readme.md
└── requirements.txt

基本机构有了,开始安装相关依赖,我自己的openresty是安装在/opt目录下,大致看下结构

1
.
├── bin
├── lualib
│   └── cjson.so
│   └── ngx
│   └── rds
│   └── redis
│   └── resty
├── luajit
├── nginx
└── pod
└── resty.index

lualib/resty 主要就是openresty内置的resty 模块,为了将第三方模块区分出来,最好新建一个目录

1
mkdir /opt/openresty/lualib/3rd_resty/resty

可能会奇怪为什么需要3rd_resty/resty这样的嵌套目录,因为 template.lua 文件的模块是resty.template,这样才能正确的被lua导入,
将需要的lua-resty-template/template.lua 文件放置于/opt/openresty/lualib/3rd_resty/resty,这一步就结束了。

Coding

开始编码,其实首先需要修改原始的Nginx配置文件,在nginx.conf 添加以下2行。

1
lua_package_path '/opt/openresty/lualib/3rd_resty/?.lua;;'
include /path/to/your/nginx.conf;

lua_package_path 是 lua_nginx_module 库的内置参数,设置了lua的包解析路径。

项目的nginx.conf 是这样。

1
server {
    listen 6699;
    set $tempalte_root /path/to/project/html;
location / {
    default_type text/html;
    content_by_lua_file /path/to/lua_file/content.lua;
}

}

set $tempalte_root /path/to/project/html; 是设置html文件的解析路径,
content_by_lua_file 也是 lua_nginx_module 库的内置参数,我们完成功能最关键的语句,会调用lua文件执行代码,获得返回结果,直接响应请求。

其他lua代码和html代码就不贴上来了,有兴趣的去github看吧。

其他

不得不说,openresty通过lua扩展nginx的功能,使其更加的强大。使用它来搭建网站不能真正发挥其在服务端的作用,本文只是管中窥豹,后续还有更多值得深入的地方。