1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

セキュリティごった煮一人完走チャレンジAdvent Calendar 2024

Day 7

作って学ぶリバースプロキシ③Lua Scriptのセットアップ

Last updated at Posted at 2024-12-08

これは何?

前回記事では,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関連のライブラリから扱える変数について補足しておきます。

  1. ngx.varはnginx.conf上の変数を操作できる。

    ngx.var.pass = "https://example.com";
    
    nginx.conf
                set $pass ""; # luaで書き換える変数
    
  2. ngx.ctxはリクエストスコープ内でのデータの共有に使う --> 複数ファイルで値を自動的に共有できるが一時的にしか使わない変数で使う。


ライブラリの管理方法

  • LuaRocksを使ってライブラリを管理できる。
  • LuaRocksとLuaをダウンロードするためのhererocksがある。

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のパスを配置する。

nginx.conf
        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経由でサイトアクセスしてみます。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?