これは何?
前回記事では,OpenRestyとnginx.confの構文についてまとめました。
今回は,OpenRestyで使うLua Scriptについてまとめます。
Lua Scriptとは
公式のintroductionに書いてあることを軽く書いておきます。
-
スクリプト言語である。
- 手続き型プログラミング
- 関数型
- オブジェクト指向
- データ駆動形プログラミング
-
Luaはポルトガル後で月を意味する
-
組み込みやゲーム等で使用されている。
-
スクリプト言語にしては速いらしい
kostyaにベンチマークががあるが,Python以上PHP,Ruby未満といった感じらしい。
-
Cコンパイラがあればビルドできる
文法について
一旦これを斜め読みしておけば良さそうです。(丸投げ感)
これらに書いていない部分で個人的に重要だなと思ったのは,ifでnil
及び,false
以外はtrueと判定されることです。
Lua 5.4 Reference Manual 3.3.4 – Control Structures
All values different from nil and false test true. In particular, the number 0 and the empty string also test true.
そのため,以下のように値が空でないかで判定ができ,これが多用されている印象があります。
if err then
print("error");
end
ついでに,OpenRestyから使うということで,nginx関連のライブラリから扱える変数について補足しておきます。
-
ngx.var
はnginx.conf上の変数を操作できる。ngx.var.pass = "https://example.com";
nginx.confset $pass ""; # luaで書き換える変数
-
ngx.ctx
はリクエストスコープ内でのデータの共有に使う --> 複数ファイルで値を自動的に共有できるが一時的にしか使わない変数で使う。
ライブラリの管理方法
Dockerfileを置いておきます。
FROM openresty/openresty:1.21.4.1-0-bullseye-fat AS devcontainer
# NOTE: nginxの-pオプションの代わりにWORKDIRで指定
WORKDIR /usr/local/openresty
USER root
RUN apt-get update
# libreadline-def: For gcc build Lua
# libssl-dev, m4: For luarocks install http
RUN <<EOF bash -ex
apt install -y --no-install-recommends \
gcc \
unzip \
make \
libreadline-dev \
libssl-dev \
m4
EOF
# install Python3 to install HereRocks
RUN <<EOF bash -ex
apt install -y --no-install-recommends \
python3 \
python3-pip
pip install hererocks
rm -rf /var/lib/lists/
EOF
# install LuaRocks
RUN hererocks lua54 -l 5.4 -r latest
# build LuaRocks from rockspec
# TODO: ライブラリをrockspeckとかで管理したい
RUN <<EOF bash -ex
PATH=$PATH":/usr/local/openresty/lua54/bin"
luarocks install lua-resty-redis
luarocks install lua-resty-template
luarocks install lua-resty-string
luarocks install http
luarocks install lua-resty-balancer
EOF
COPY ./conf/nginx.conf /usr/local/openresty/nginx/conf/nginx.conf
EXPOSE 80
# Not using daemon mode.
CMD ["openresty", "-g", "daemon off;"]
OpenRestyからの実行方法
基本的にnginx.conf経由の実行になる。
location
で指定されたディレクトリに対してaccess_by_lua_file
で実行したいLua Scriptのパスを配置する。
location / {
root /usr/local/openresty/reverse_proxy/html;
default_type 'text/html';
access_by_lua_file /usr/local/openresty/reverse_proxy/src/main.lua;
}
その他興味深いドキュメントメモ
次回
実際にOpenResty経由でサイトアクセスしてみます。