ng_lua環境構築
前言:
ngx_lua_moduleはnginx httpモジュールで、lua解析器をnginxに埋め込み、lua言語で作成されたWebバックグラウンドスクリプトを解析して実行します.
機能:
WindowsとLinuxプラットフォームをサポートします.
高同時性と高性能をサポートします.
HTMLページには、PHPに似たLUAスクリプトコードが埋め込まれています.
ブロックされていないデータベース操作をサポートし、現在はMYSQLのみをサポートしています.
非同期のファイルIO操作をサポートします.
非ブロックSOCKET IO動作をサポートします.
必要なモジュールは次のとおりです.
LuaJIT-2.0.2.tar.gz
lua-nginx-module(v0.8.6.tar.gz)
pcre-8.33.tar.gz(nginx必要)
echo-nginx-module(v0.57.tar.gz)
ngx_devel_kit(v0.2.18.tar.gz)
JITは通常、プログラムには静的コンパイルと動的直訳の2つの実行方式がある.静的にコンパイルされたプログラムは実行前にすべてマシンコードに翻訳され,動的直訳では1文1文実行しながら翻訳される.インスタントコンパイル(Just-In-Time Compiler)では、ソースコードを一言ずつコンパイルしますが、翻訳したコードをキャッシュしてパフォーマンス損失を低減します.JAVA、.NETインプリメンテーションは、高速なコード実行を提供するためにインスタントコンパイルを使用します.
注意:nginx.confに「lua_を追加」code_Cache on/offは、コードをキャッシュするか否かをオンにするので、変更するたびに」*.lua」ファイルを有効にするにはreload nginxが必要です.「set_のみ」by_lua_file, content_by_lua_file, rewrite_by_lua_file, and access_by_lua_file」は有効です.他のプロファイルに書くためには、コードを変更するにもreload nginxが必要です.本番環境ではcacheを無効にすることはできません.同時にluaコードで「dofile」または「loadfie」を使用して外部luaスクリプトをロードしてもキャッシュされず、代わりに「require」を使用する必要があります.cacheを無効にし、コールコードの下にある場合にのみ使用します.
LuaJITは、JITコンパイル技術を利用してLuaスクリプトを直接マシンコードにコンパイルし、CPUによって実行されるバージョンです.2.0と2.1の現在の安定バージョンは2.0です.2.1バージョンとngx_luaは、主にCloudFlare社のluajitへの寄付で、パフォーマンスが向上します.FFIライブラリは、LuaJITで最も重要な拡張ライブラリです.1.純粋なLuaコードから外部C関数を呼び出し、Cデータ構造を使用することができる.2.Lua標準mathライブラリのようにLua拡張ライブラリを作成する必要はありません.3.開発者をLua拡張Cライブラリ(言語/機能バインドライブラリ)の開発の煩雑な仕事から解放する.
インストール手順:
1.luaJIT取付
次にluajitまたはluaの環境変数(Nginxコンパイル時に必要)を構成し、luajitを使用すると次の2行、luaを使用すると次の2行を実行します.
(もちろん/etc/profileを変更して、次の2行に追加することもできます.source/etc/profileをすぐに有効にします)
-- luajit --
-- lua --
2.解凍luaモジュール説明大量のLuaコードがNginxに書かれているため、コンフィギュレーションファイルが煩雑に見えるため、ここでcontent_by_lua_fileはLuaスクリプトファイルを導入する
content_を使用するにはby_lua_file、nginx_をインストールする必要がありますlua_モジュールモジュール
3.nginxをインストールしてnginをインストールするために必要なpcreライブラリ(正則的に一致するために使用される?):
echo-nginx-moduleをダウンロードして、解凍します
ダウンロードngx_devel_kit,解凍
nginxのインストール:
コンパイルに成功すると、次の説明が表示されます.
Configuration summary
+ using PCRE library:/data0/source_code/pcre-8.33/
+ OpenSSL library is not used
+ using builtin md5 code
+ sha1 library is not found
+ using system zlib library
nginx path prefix: "/data0/nginx-1.4.2"
nginx binary file: "/data0/nginx-1.4.2/sbin/nginx"
nginx configuration prefix: "/data0/nginx-1.4.2/conf"
nginx configuration file: "/data0/nginx-1.4.2/conf/nginx.conf"
nginx pid file: "/data0/nginx-1.4.2/logs/nginx.pid"
nginx error log file: "/data0/nginx-1.4.2/logs/error.log"
nginx http access log file: "/data0/nginx-1.4.2/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
インストール:
nginxを起動するには:
nginx起動時に発生した問題:nginx:[emerg]getpwnam(「www」)failedエラー:nginx:[emerg]getpwnam(「www」)failed
ソリューション1
nginxでconfでuser nobodyのコメントを削除
ソリューション2
エラーの原因は、wwwというユーザーが作成されていないためです.サーバシステムにwwwユーザーグループとユーザーwwwを追加する必要があります.次のコマンドです.
テスト:1、スクリプトを直接埋め込み、nginxを修正する.conf、参加:
location/hello {
default_type 'text/plain';
content_by_lua 'ngx.say("hello, lua")';
}
実行:
curl 'http://localhost/hello',
出現:hello,lua証明OK
2、呼び出しスクリプトファイル
(1)Nginxルートディレクトリでluaフォルダを新規作成しtest_を作成するlua.luaスクリプト、スクリプトの内容は次のとおりです.
ngx.say("hello, lua")
(2)nginxを修正する.confプロファイル
nginxのhttp blockに、luaスクリプトを導入するために次のコードを追加します.
lua_package_path "/data0/nginx-1.4.2/lua/?.lua;;"; (注意引用符には2つのセミコロンが入っています)
luaスクリプトの変更をタイムリーに有効にするには、nginxプロファイルのserver blockにコードを1行追加する必要があります.
lua_code_cache off; #この行に参加していないか、onに設定している場合はnginxを再起動する必要があります.
プロファイルに次のコードを追加します.
location/hello {
content_by_lua_file lua/test_lua.lua;
}
注意プロファイルの変更が完了したら、有効になるには再ロードする必要があります:/data 0/nginx-1.4.2/sbin/nginx-s reload
curl 'http://localhost/hello',出現:hello,lua証明OK
その他
1、どのように1つのすでに詰めたnginxに更にその他のモジュールを詰めますか?
例えば、echo-nginx-moduleというモジュールをインストールしていなかったら、今どうすればいいですか?このモジュールのtarをダウンロードします.gzパッケージ、解凍、nginxインストールパッケージのディレクトリに移動し、nginxインストールパッケージ(元に解凍されたフォルダがあり、削除)を再解凍し、解凍後のnginxディレクトリにカットします.ここでは、以前にコンパイルされたモジュールを再コンパイルし、makeを実行し、最後にコンパイル後に生成された新しいnginxファイルを元のnginxファイルに上書きする必要があることに注意してください.詳細:
nginxファイルは非常に小さいが、性能は非常に効率的で、この方面はapacheに完勝し、nginxファイルが小さい原因の一つはnginxが持っている機能が相対的に少ないことであり、幸いにもnginxは第三者モジュールを許可し、第三者モジュールはnginxをますます強くする.インストールモジュールの面では、nginxはapacheインストールモジュールが便利ではないように見え、phpインストールの拡張も便利ではない.オリジナルのnginxでは、モジュールを動的にロードできないため、サードパーティ製モジュールをインストールするときにnginxファイルを上書きする必要があります.次にnginxの第3モジュールのインストール方法を見てみましょう.
nginxサードパーティモジュールのインストール方法:
pagespeedモジュールインスタンスをインストールする
nginxがインストールされていない場合にnginxサードパーティモジュールをインストールする
nginxがインストールされている場合はnginxモジュールをインストールします
それに比べてnginxファイルを上書きするのはわずかです.
まとめて、nginxをインストールサードパーティモジュールは、実際には-add-moduleを使用してnginxを再インストールし、make installではなく、コンパイルディレクトリの下objs/nginxファイルを古いnginxファイルに直接上書きする.複数のnginxサードパーティモジュールをインストールする必要がある場合は、対応するadd-moduleを複数指定するだけです.
備考:再コンパイルするときは、以前コンパイルしたモジュールをconfigureパラメータに必ず追加してください.(元のモジュールを表示する方法:nginx-V)
nginxは非常に多くのnginxサードパーティモジュールを提供し、インストール、アドレスを提供します.http://wiki.nginx.org/3rdPartyModules
2、Nginxをインストールするサードパーティモジュールをコンパイルする時、一つのエラーが発生した:
/data0/nginx-1.4.2/sbin/ngxin -s reload
/data0/nginx-1.4.2/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
理由:Nginxコンパイル時にRPATHを指定する必要があり、
解決策は、次のオプションを追加します:./configure --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB"
または
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
詳細はngx_についてluaモジュールの紹介:
http://wiki.nginx.org/HttpLuaModule
ngx_lua_moduleはnginx httpモジュールで、lua解析器をnginxに埋め込み、lua言語で作成されたWebバックグラウンドスクリプトを解析して実行します.
機能:
WindowsとLinuxプラットフォームをサポートします.
高同時性と高性能をサポートします.
HTMLページには、PHPに似たLUAスクリプトコードが埋め込まれています.
ブロックされていないデータベース操作をサポートし、現在はMYSQLのみをサポートしています.
非同期のファイルIO操作をサポートします.
非ブロックSOCKET IO動作をサポートします.
必要なモジュールは次のとおりです.
LuaJIT-2.0.2.tar.gz
lua-nginx-module(v0.8.6.tar.gz)
pcre-8.33.tar.gz(nginx必要)
echo-nginx-module(v0.57.tar.gz)
ngx_devel_kit(v0.2.18.tar.gz)
JITは通常、プログラムには静的コンパイルと動的直訳の2つの実行方式がある.静的にコンパイルされたプログラムは実行前にすべてマシンコードに翻訳され,動的直訳では1文1文実行しながら翻訳される.インスタントコンパイル(Just-In-Time Compiler)では、ソースコードを一言ずつコンパイルしますが、翻訳したコードをキャッシュしてパフォーマンス損失を低減します.JAVA、.NETインプリメンテーションは、高速なコード実行を提供するためにインスタントコンパイルを使用します.
注意:nginx.confに「lua_を追加」code_Cache on/offは、コードをキャッシュするか否かをオンにするので、変更するたびに」*.lua」ファイルを有効にするにはreload nginxが必要です.「set_のみ」by_lua_file, content_by_lua_file, rewrite_by_lua_file, and access_by_lua_file」は有効です.他のプロファイルに書くためには、コードを変更するにもreload nginxが必要です.本番環境ではcacheを無効にすることはできません.同時にluaコードで「dofile」または「loadfie」を使用して外部luaスクリプトをロードしてもキャッシュされず、代わりに「require」を使用する必要があります.cacheを無効にし、コールコードの下にある場合にのみ使用します.
LuaJITは、JITコンパイル技術を利用してLuaスクリプトを直接マシンコードにコンパイルし、CPUによって実行されるバージョンです.2.0と2.1の現在の安定バージョンは2.0です.2.1バージョンとngx_luaは、主にCloudFlare社のluajitへの寄付で、パフォーマンスが向上します.FFIライブラリは、LuaJITで最も重要な拡張ライブラリです.1.純粋なLuaコードから外部C関数を呼び出し、Cデータ構造を使用することができる.2.Lua標準mathライブラリのようにLua拡張ライブラリを作成する必要はありません.3.開発者をLua拡張Cライブラリ(言語/機能バインドライブラリ)の開発の煩雑な仕事から解放する.
インストール手順:
1.luaJIT取付
wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz
tar -xzvf LuaJIT-2.0.2.tar.gz
cd LuaJIT-2.0.2
make && make install
次にluajitまたはluaの環境変数(Nginxコンパイル時に必要)を構成し、luajitを使用すると次の2行、luaを使用すると次の2行を実行します.
(もちろん/etc/profileを変更して、次の2行に追加することもできます.source/etc/profileをすぐに有効にします)
-- luajit --
# tell nginx's build system where to find LuaJIT:
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.0
-- lua --
# or tell where to find Lua if using Lua instead:
export LUA_LIB=/path/to/lua/lib
export LUA_INC=/path/to/lua/include
2.解凍luaモジュール説明大量のLuaコードがNginxに書かれているため、コンフィギュレーションファイルが煩雑に見えるため、ここでcontent_by_lua_fileはLuaスクリプトファイルを導入する
content_を使用するにはby_lua_file、nginx_をインストールする必要がありますlua_モジュールモジュール
cd /data0/source_code
wget https://github.com/chaoslawful/lua-nginx-module/archive/v0.8.6.tar.gz
tar -zxvf v0.8.6.tar.gz
3.nginxをインストールしてnginをインストールするために必要なpcreライブラリ(正則的に一致するために使用される?):
<span style="font-family: Arial, Helvetica, sans-serif;">wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz</span>
tar -zxvf pcre-8.33.tar.gz
cd pcre-8.33
./configure
make && make install
echo-nginx-moduleをダウンロードして、解凍します
wget https://github.com/openresty/echo-nginx-module/archive/v0.57.tar.gz
tar -zxvf v0.57.tar.gz
ダウンロードngx_devel_kit,解凍
wget -c https://github.com/simpl/ngx_devel_kit/archive/v0.2.18.tar.gz
tar -zxvf v0.2.18.tar.gz
nginxのインストール:
wget http://nginx.org/download/nginx-1.4.2.tar.gz
cd nginx-1.4.2
./configure --user=www --group=www --prefix=/data0/nginx-1.4.2 \
--add-module=/data0/source_code/ngx_devel_kit-0.2.18 \
--add-module=/data0/source_code/echo-nginx-module-0.57 \
--add-module=/data0/source_code/lua-nginx-module-0.8.6 \
--with-http_stub_status_module \
--with-pcre=/data0/source_code/pcre-8.33/
コンパイルに成功すると、次の説明が表示されます.
Configuration summary
+ using PCRE library:/data0/source_code/pcre-8.33/
+ OpenSSL library is not used
+ using builtin md5 code
+ sha1 library is not found
+ using system zlib library
nginx path prefix: "/data0/nginx-1.4.2"
nginx binary file: "/data0/nginx-1.4.2/sbin/nginx"
nginx configuration prefix: "/data0/nginx-1.4.2/conf"
nginx configuration file: "/data0/nginx-1.4.2/conf/nginx.conf"
nginx pid file: "/data0/nginx-1.4.2/logs/nginx.pid"
nginx error log file: "/data0/nginx-1.4.2/logs/error.log"
nginx http access log file: "/data0/nginx-1.4.2/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
インストール:
make -j2
make install
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
nginxを起動するには:
/data0/nginx/sbin/nginx -c /data0/nginx/conf/nginx.conf
nginx起動時に発生した問題:nginx:[emerg]getpwnam(「www」)failedエラー:nginx:[emerg]getpwnam(「www」)failed
ソリューション1
nginxでconfでuser nobodyのコメントを削除
ソリューション2
エラーの原因は、wwwというユーザーが作成されていないためです.サーバシステムにwwwユーザーグループとユーザーwwwを追加する必要があります.次のコマンドです.
/usr/sbin/groupadd -f www
/usr/sbin/useradd -g www www
テスト:1、スクリプトを直接埋め込み、nginxを修正する.conf、参加:
location/hello {
default_type 'text/plain';
content_by_lua 'ngx.say("hello, lua")';
}
実行:
curl 'http://localhost/hello',
出現:hello,lua証明OK
2、呼び出しスクリプトファイル
(1)Nginxルートディレクトリでluaフォルダを新規作成しtest_を作成するlua.luaスクリプト、スクリプトの内容は次のとおりです.
ngx.say("hello, lua")
(2)nginxを修正する.confプロファイル
nginxのhttp blockに、luaスクリプトを導入するために次のコードを追加します.
lua_package_path "/data0/nginx-1.4.2/lua/?.lua;;"; (注意引用符には2つのセミコロンが入っています)
luaスクリプトの変更をタイムリーに有効にするには、nginxプロファイルのserver blockにコードを1行追加する必要があります.
lua_code_cache off; #この行に参加していないか、onに設定している場合はnginxを再起動する必要があります.
プロファイルに次のコードを追加します.
location/hello {
content_by_lua_file lua/test_lua.lua;
}
注意プロファイルの変更が完了したら、有効になるには再ロードする必要があります:/data 0/nginx-1.4.2/sbin/nginx-s reload
curl 'http://localhost/hello',出現:hello,lua証明OK
その他
1、どのように1つのすでに詰めたnginxに更にその他のモジュールを詰めますか?
例えば、echo-nginx-moduleというモジュールをインストールしていなかったら、今どうすればいいですか?このモジュールのtarをダウンロードします.gzパッケージ、解凍、nginxインストールパッケージのディレクトリに移動し、nginxインストールパッケージ(元に解凍されたフォルダがあり、削除)を再解凍し、解凍後のnginxディレクトリにカットします.ここでは、以前にコンパイルされたモジュールを再コンパイルし、makeを実行し、最後にコンパイル後に生成された新しいnginxファイルを元のnginxファイルに上書きする必要があることに注意してください.詳細:
nginxファイルは非常に小さいが、性能は非常に効率的で、この方面はapacheに完勝し、nginxファイルが小さい原因の一つはnginxが持っている機能が相対的に少ないことであり、幸いにもnginxは第三者モジュールを許可し、第三者モジュールはnginxをますます強くする.インストールモジュールの面では、nginxはapacheインストールモジュールが便利ではないように見え、phpインストールの拡張も便利ではない.オリジナルのnginxでは、モジュールを動的にロードできないため、サードパーティ製モジュールをインストールするときにnginxファイルを上書きする必要があります.次にnginxの第3モジュールのインストール方法を見てみましょう.
nginxサードパーティモジュールのインストール方法:
./configure --prefix=/ --add-module=/
pagespeedモジュールインスタンスをインストールする
nginxがインストールされていない場合にnginxサードパーティモジュールをインストールする
./configure --prefix=/usr/local/nginx-1.4.1 \
--with-http_stub_status_module \
--with-http_ssl_module --with-http_realip_module \
--with-http_image_filter_module \
--add-module=../ngx_pagespeed-master --add-module=/
make
make install
nginxがインストールされている場合はnginxモジュールをインストールします
./configure --prefix=/usr/local/nginx-1.4.1 \
--with-http_stub_status_module \
--with-http_ssl_module --with-http_realip_module \
--with-http_image_filter_module \
--add-module=../ngx_pagespeed-master
make && make install
/usr/local/nginx-1.4.1/sbin/nginx -s stop
cp objs/nginx /usr/local/nginx/sbin/nginx
それに比べてnginxファイルを上書きするのはわずかです.
まとめて、nginxをインストールサードパーティモジュールは、実際には-add-moduleを使用してnginxを再インストールし、make installではなく、コンパイルディレクトリの下objs/nginxファイルを古いnginxファイルに直接上書きする.複数のnginxサードパーティモジュールをインストールする必要がある場合は、対応するadd-moduleを複数指定するだけです.
備考:再コンパイルするときは、以前コンパイルしたモジュールをconfigureパラメータに必ず追加してください.(元のモジュールを表示する方法:nginx-V)
nginxは非常に多くのnginxサードパーティモジュールを提供し、インストール、アドレスを提供します.http://wiki.nginx.org/3rdPartyModules
2、Nginxをインストールするサードパーティモジュールをコンパイルする時、一つのエラーが発生した:
/data0/nginx-1.4.2/sbin/ngxin -s reload
/data0/nginx-1.4.2/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
理由:Nginxコンパイル時にRPATHを指定する必要があり、
解決策は、次のオプションを追加します:./configure --with-ld-opt="-Wl,-rpath,$LUAJIT_LIB"
または
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
詳細はngx_についてluaモジュールの紹介:
http://wiki.nginx.org/HttpLuaModule