0Pricing
Lua Academy · レッスン

OpenRestyアーキテクチャ

ngx_luaがNginxのリクエストフェーズにLuaJITを組み込む仕組みを理解します。

「OpenRestyアーキテクチャ」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。

OpenRestyとは

OpenResty は、LuaJITをNginxに組み込んだWebプラットフォームです。Nginxを、Luaコードでリクエストを処理できる高機能なWebアプリケーションサーバーに変えます。

ngx_luaモジュール

ngx_lua モジュールはLuaJITをNginxに統合します。リクエストとレスポンスのデータ、タイマー、共有メモリ、コソケットにアクセスするための ngx.* APIを提供します。

Nginxのリクエストフェーズ

OpenRestyは、Nginxのリクエスト処理フェーズをLuaフックとして公開します:init_by_lua、access_by_lua、content_by_lua、header_filter_by_lua、log_by_lua。

nginx.confの基本

適切なフェーズディレクティブを使用して、nginx.confにLuaハンドラーを設定します。

# nginx.conf snippet
server {
  listen 80;
  location /hello {
    content_by_lua_block {
      ngx.header["Content-Type"] = "text/plain"
      ngx.say("Hello from Lua!")
    }
  }
}

リクエストごとのコルーチンモデル

受信した各リクエストには、専用のLuaコルーチンが割り当てられます。コルーチンが(データベースの待機などで)yieldすると、Nginxは他のリクエストを処理します。これにより、ブロッキングなしで高い並行性を実現できます。

ngx API

ngxの主な関数は、ngx.say()、ngx.print()、ngx.header、ngx.var、ngx.req.*、ngx.status、ngx.exit()です。

共有メモリの状態

ワーカープロセスは、ngx.shared.DICTを介してデータを共有します。これはnginx.confで宣言し、メモリサイズを固定する共有ディクショナリです。

# nginx.conf
lua_shared_dict my_cache 10m;
-- In Lua:
ngx.shared.my_cache:set("key", "value", 60)

Cosocket

OpenRestyのcosocketは、ノンブロッキングのTCP、UDP、HTTPを提供します。Nginxのイベントループと統合されているため、Luaはワーカーをブロックせずに非同期I/Oを実行できます。

タイマー API

ngx.timer.at(delay, fn)は、遅延時間の経過後にLua関数を実行するようスケジュールします。ngx.timer.every(interval, fn)は、一定間隔で実行します。

パフォーマンス特性

OpenRestyは、ワーカー1つあたり数万件の同時接続を処理できます。LuaJITの速度と、実績のあるNginxのI/O多重化を組み合わせることで、I/OバウンドなワークロードではGoやNode.jsと競合できる性能を発揮します。

主な用途

  • APIゲートウェイとレート制限
  • 認証・認可ミドルウェア
  • 動的なリクエストルーティング
  • RedisおよびMemcachedのキャッシュ層

OpenRestyに関する質問

OpenRestyはどのようにして高い並行性を実現していますか。

振り返り: OpenRestyのアーキテクチャ

OpenRestyはNginxにLuaJITを組み込みます。各リクエストはコルーチンとして実行されます。ngx.* APIは、リクエストとレスポンスのデータ、共有メモリ、タイマー、ノンブロッキングcosocketへのアクセスを提供します。

よくある質問

「OpenRestyアーキテクチャ」レッスンは無料ですか?

はい。「OpenRestyアーキテクチャ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。

「OpenRestyアーキテクチャ」で何を学びますか?

ngx_luaがNginxのリクエストフェーズにLuaJITを組み込む仕組みを理解します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Lua Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「OpenRestyアーキテクチャ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLua Academyレッスンでコードを書いて実行できますか?

はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. OpenRestyアーキテクチャ
  2. LuaでのHTTPリクエスト処理
  3. CosocketとノンブロッキングTCP
  4. 共有メモリ辞書
← Lua Academyに戻る