OpenResty实战系列 | Lua脚本开发 Hello World

[上一篇] OpenResty实战系列 | 入门介绍及安装

概述

为了方便开发,我们在本地配置一个虚拟访问域名:http://openresty.tinywan.com

/usr/local/openresty/nginx/conf目录下创建一个openresty.tinywan.com.conf

openresty.tinywan.com.conf 配置文件内容

代码语言:javascript
复制
server {
    listen 80;
    server_name  openresty.tinywan.com;
}

编写 location

openresty.tinywan.com.confserver部分添加如下配置

代码语言:javascript
复制
location /lua {
    default_type 'text/html';  
    content_by_lua 'ngx.say("Hello World")'; 
}

先检查Nginx配置文件语法是否正确

代码语言:javascript
复制
/usr/local/openresty/nginx/sbin/nginx -t

输出以下内容表示配置

代码语言:javascript
复制
nginx: the configuration file /usr/local/openresty/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test is successful

重新加载配置

代码语言:javascript
复制
sudo systemctl restart openresty.service

或者

代码语言:javascript
复制
/usr/local/openresty/nginx/sbin/nginx -s reload

浏览器访问http://openresty.tinywan.com/lua应该返回Hello World

使用lua代码文件

把lua代码放在nginx配置中会随着lua的代码的增加导致配置文件太长不好维护,因此应该把lua代码移到外部文件中存储。

/usr/local/openresty/nginx/conf目录下创建一个lua目录。新建一个hello.lua文件,添加如下内容

代码语言:javascript
复制
ngx.say("Hello 开源技术小栈")

修改openresty.tinywan.com.conf 配置

代码语言:javascript
复制
server {
    listen 80;
    server_name  openresty.tinywan.com;
location /lua {
    default_type 'text/html';  
    content_by_lua_file conf/lua/hello.lua; #相对于nginx安装目录 
}

}

此处conf/lua/hello.lua也可以使用绝对路径/usr/local/openresty/nginx/conf/lua/hello.lua。重启Openresty,重新访问

代码语言:javascript
复制

lua_code_cache

默认情况下lua_code_cache 是开启的,默认会缓存lua代码,即每次lua代码变更必须reload nginx才生效,如果在开发阶段可以通过lua_code_cache off;关闭缓存,这样调试时每次修改lua代码不需要reload nginx,但是正式环境一定记得开启缓存。

代码语言:javascript
复制
server {
listen 80;
server_name openresty.tinywan.com;

location /lua {
    default_type 'text/html'; 
    lua_code_cache off; 
    content_by_lua_file conf/lua/hello.lua; 
}

}

开启后reload nginx会看到如下报警

代码语言:javascript
复制
nginx: [alert] lua_code_cache is off; this will hurt performance in /etc/nginx/conf.d/openresty.tinywan.com.conf:7

错误日志

如果运行过程中出现错误,请不要忘记查看错误日志。

代码语言:javascript
复制
tail -f /usr/local/openresty/nginx/logs/error.log

错误内容

代码语言:javascript
复制
2024/07/13 13:13:48 [emerg] 1#1: invalid return code "Hello World!" in /etc/nginx/conf.d/tinywan_lua.conf:7
2024/07/13 13:14:01 [emerg] 1#1: invalid return code "Hello World!" in /etc/nginx/conf.d/tinywan_lua.conf:7
2024/07/13 13:14:28 [emerg] 1#1: invalid return code "Hello World!" in /etc/nginx/conf.d/tinywan_lua.conf:7