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
動いてますね。
停止は
# ./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!')";
}
}
}
うまく行きました。
表示する文字列を変更しても、すぐには反映されません。
設定ファイルの再読み込みが必要です。
# ./nginx -s reload
日本語もOKでした。
別ファイルの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の内容は以下の通り。
- ngx.header.content_type = 'text/plain'
- ngx.print('外部ファイルでこんにちは!')
設定を再読み込み。
# ./nginx -s reload
うまく行きました。
外部ファイルにした場合も、プログラム内容変更後は
nginxのリロードが必要です。
- 関連記事
-
- nginx 1.6.2 + lua-nginx-moduleでapache2 mod_access_tokenを実装
- nginx 1.6.2 + lua-nginx-moduleで簡易ファイルアップローダー
- Debian 7 + nginx 1.6.2 + lua-nginx-moduleの環境構築
- Luaでメールの送信を行う
- Luaで文字列の分割を行なう(split)
コメント