Debian 7 + nginx 1.6.2 + lua-nginx-moduleの環境構築

nginxはluaを組み込んで動作させることができます。
以前から知ってはいたのですが試したことなかったのでやってみます。

Debian 7 + nginx 1.6.2の構成で試しました。


必要なもの



Cent OS(6.4)にNginx + lua-nginx-moduleをインストール

HttpLuaModule

上記を参考にしました。

必要なものは


luajit
lua-nginx-module
ngx_devel_kit
nginx



一つづつ設定していきます。




必須ライブラリ



ビルドを進める上で必要になるライブラリをインストールしておきます。


# apt-get install g++ make git




nginx本体のビルドに必要なライブラリです。


# apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev libbz2-dev libssl-dev tar unzip







luajit



Debian 7の時点ではどうもパッケージが用意されていないようなので、
ソースからインストールします。

http://luajit.org/download.html

こちらから最新のソースを取得。
ビルドしてインストールします。


# cd /usr/local/src
# wget http://luajit.org/download/LuaJIT-2.0.3.tar.gz
# tar zxf LuaJIT-2.0.3.tar.gz
# cd LuaJIT-2.0.3
# make PREFIX=/opt/luajit
# make install




インストールできました。


# luajit -v
LuaJIT 2.0.3 -- Copyright (C) 2005-2014 Mike Pall. http://luajit.org/






lua-nginx-module,ngx_devel_kit



最新のソースを取得しておきます。
nginx本体のビルドの時、ダウロードしたソースのパスを指定します。


# cd /usr/local/src
# git clone https://github.com/chaoslawful/lua-nginx-module.git
# git clone https://github.com/simpl/ngx_devel_kit.git






nginx



ソースをダウンロードしてビルドします。


# cd /usr/local/src/
# wget http://nginx.org/download/nginx-1.6.2.tar.gz
# tar zxf nginx-1.6.2.tar.gz
# cd nginx-1.6.2



configure時、add-moduleでダウンロードしたファイルのパスを指定します。


# ./configure --prefix=/opt/nginx \
> --add-module=/usr/local/src/ngx_devel_kit \
> --add-module=/usr/local/src/lua-nginx-module



configureが通ったら、make & make install


# make
# make install



起動できるかテストしてみます。


# cd /opt/nginx/sbin/
# ./nginx



動いてますね。

517_01.png


停止は


# ./nginx -s quit




設定ファイルの再読み込みは


# ./nginx -s reload





起動スクリプトがないのは不便なので、こちらを参考に設定。

http://wiki.nginx.org/InitScriptsJa
http://kbeezie.com/debian-ubuntu-nginx-init-script/


# vi /etc/init.d/nginx




結構雑な内容ですが。


#! /bin/sh

### BEGIN INIT INFO
# Provides:         nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:     0 1 6
# Short-Description: starts the nginx web server
# Description:     starts nginx using start-stop-daemon
### END INIT INFO

PATH=/opt/bin:/opt/sbin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/opt/nginx/sbin/nginx
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
        . /etc/default/nginx
fi

set -e

case "$1" in
start)
        echo "Starting $DESC: "
        exec $DAEMON
        echo "$NAME."
        ;;
stop)
        echo "Stopping $DESC: "
        exec $DAEMON -s quit
        echo "$NAME."
        ;;
reload)
     echo "Reloading $DESC configuration: "
     exec $DAEMON -s reload
     echo "$NAME."
     ;;
*)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|reload}" >&2
        exit 1
        ;;
esac

exit 0




実行権限を付与しておきます。


# chmod +x /etc/init.d/nginx



これで下準備が出来ました。




埋込み型のスクリプト




/opt/nginx/conf/nginx.conf
このファイルに直接Luaのプログラムを記載してみます。

わかりやすさのため、処理を削った内容は以下のとおり。
ルートにアクセスすると、Hello,lua!を返します。


worker_processes 1;

events {
    worker_connections 1024;
}

http {
    include     mime.types;
    default_type application/octet-stream;

    sendfile        on;

    keepalive_timeout 65;

    server {
        listen     80;
        server_name localhost;

        location / {
            default_type 'text/plain';
            content_by_lua "ngx.say('Hello,lua!')";
        }
    }
}




うまく行きました。

517_02.png


表示する文字列を変更しても、すぐには反映されません。
設定ファイルの再読み込みが必要です。


# ./nginx -s reload



日本語もOKでした。

517_03.png





別ファイルのlua呼び出し



設定ファイルに直接記載するのではなく、別ファイルに記載した
luaプログラムを実行してみます。

content_by_lua_fileで、実行するluaファイルを指定。


worker_processes 1;

events {
    worker_connections 1024;
}

http {
    include     mime.types;
    default_type application/octet-stream;

    sendfile        on;

    keepalive_timeout 65;

    server {
        listen     80;
        server_name localhost;

        location / {
            content_by_lua_file /opt/nginx/lua/sample.lua;
        }
    }
}




sample.luaの内容は以下の通り。


  1. ngx.header.content_type = 'text/plain'
  2. ngx.print('外部ファイルでこんにちは!')




設定を再読み込み。


# ./nginx -s reload




うまく行きました。

517_04.png

外部ファイルにした場合も、プログラム内容変更後は
nginxのリロードが必要です。


関連記事

コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
https://symfo.web.fc2.com/

PR

検索フォーム

月別アーカイブ