OpenResty利点
まず、私たちはnginxのプラス、多くのサードパーティのモジュールの中核であるOpenRestyを、使用することを選択し、最大の明るいスポットは、使用するWebサーバーとしてnginxのを作り、Luaは統合開発環境のデフォルトです。
イベント駆動型モデルと、非ブロッキングIOによるnginxのは、高性能なWebアプリケーションを実現することができます。
そしてOpenRestyはnginxのWebアプリケーションの開発者は、より便利で簡単なようなので、上のMySQL、Redisの、Memcachedの、およびなどのコンポーネントの数を提供します。現在、Jingdongは、このようなので、その上、このようなネットワーク淘宝網などの他の企業は、nginxの+ Luaのアーキテクチャを使用して、リアルタイムの価格スパイク、動的なサービス、単一の製品ページ、リストページなど。
IV。nginxのとLUAの紹介
1. Nginxは:
の利点(1)nginxの
-
少ないメモリとリソースを取るよりも軽量で同じ始まるApacheのWebサービス
-
同時アンチnginxのapacheの処理要求が非同期であり、非ブロック高同時閉塞性nginxのは、高性能、低リソース消費の下で維持します
-
高度にモジュール設計は、モジュールを記述することは比較的簡単です
-
コミュニティ活動家は、ああすぐに高性能モジュールの様々な生産しました
(2)nginxのはなぜ高い性能を、より少ないメモリを取ります
我々はすべて、高性能のnginxのを知って、そしてその高性能アーキテクチャをnginxのよう不可分です。ここでは、簡単なラフnginxのアーキテクチャについて説明します。
-
まず、nginxのは、それが良いものを、プロセスモデルの多くを使用していますか?まず、各ワーカー・プロセスのために、そのオーバーヘッドロックの必要性を排除し、別のプロセス、ノーロックは、プログラミングで同じ時間を見て持ってきて、問題は非常に簡単になります。第二に、別のプロセスの使用は、プロセスが終了した後、別のプロセスがまだ働いていた、サービスが中断されることはありません、お互いに影響を与えません作るプロセスはすぐに新しいワーカープロセスを開始習得することができます。もちろん、異常終了ワーカープロセスが予期せず終了し、すべての要求は、現在の作業員の故障につながるだろう、確かにプログラムのバグですが、そうリスクを軽減、すべての要求には影響しません。
-
nginxのは、非同期それが何であるか、非ブロッキング、要求に対処するために、非同期の非ブロッキング方法は何ですか?実際の状況は、コールウェイティングなどのスレッドioは代わりにここでのブロッキング、発生しますが、実行に行くそして、そのようなIOなど他のもの、準備に対処するとき、私はここでは具体的に説明し、誰もいないということですA。
2.連絡先:
(1)Luaは小さなスクリプト言語です。著者はブラジル人です。言語は、アプリケーションのための柔軟な拡張やカスタマイズ機能を提供する、組み込みアプリケーション向けに設計されて
(2)Luaは特徴:
-
Luaのスクリプトは簡単にC / C ++コードを呼び出すことができる関数Cを呼び出して変えることができます/アプリケーション内のLuaを作るC ++は、広く使用することができます。拡張スクリプトとしてだけでなく、理解し、維持する代わりに、XML、INIファイル形式、および容易なの、通常のコンフィギュレーション・ファイルとして使用することができます。
-
標準のCコードからLuaのによって書かれたが、ほとんどすべての、シンプルで美しいです実行し、すべてのオペレーティングシステムおよびプラットフォームでコンパイルすることができます。完全なLuaのインタプリタが、200Kは、現在のすべてのスクリプトエンジンでは、Luaは最速のスピードです。これはすべてのLuaスクリプトが最良の選択として埋め込まれて決定されます。
V. OpenRestyインストール
私のドアの上に、より良いあなたが理解できるようにするために、導入の動作原理と同様に、Nginxは、Luaの利点を説明するために簡単な紹介をOpenRestyします。それは何ができるか終わりにある、誰もがこれを使用することの利点を教えてください、私は簡単にOpenRestyのインストールを導入した上記の利点に加えて、誰もが知っているように単純な電流制限、の例を設定します。
OpenRestyインストール:
(1)必要なプラグインをインストールする必要性について
1
|
yum
install
readline-devel pcre-devel openssl-devel
|
(2)ダウンロードしngx_openresty-1.7.7.2.tar.gzを抽出
1
|
wget http:
//openresty
.org
/download/ngx_openresty-1
.7.7.2.
tar
.gz
|
(3)インストールLuaJIT
1
2
3
|
cd
bundle
/LuaJIT-2
.1-20150120/
make
clean &&
make
&&
make
install
ln
-sf luajit-2.1.0-alpha
/usr/local/bin/luajit
|
(4)キャッシュのnginxをきれいにするために使用され、ngx_cache_purgeモジュールをダウンロード
1
|
wget https:
//github
.com
/FRiCKLE/ngx_cache_purge/archive/2
.3.
tar
.gz
|
健康USTREAMをチェックするために使用されている(5)nginx_upstream_check_moduleダウンロード・モジュール、
1
|
wget https:
//github
.com
/yaoweibin/nginx_upstream_check_module/archive/v0
.3.0.
tar
.gz
|
(6)ngx_openresty搭載
1
2
3
4
5
6
7
8
9
|
cd
/usr/servers/ngx_openresty-1
.7.7.2
.
/configure
--prefix=
/usr/servers
--with-http_realip_module
--with-pcre
--with-luajit
--add-module=.
/bundle/ngx_cache_purge-2
.3/
--add-module=.
/bundle/nginx_upstream_check_module-0
.3.0/ -j2
make
&&
make
install
|
(7)の下には/ usr / serversディレクトリに、次のような余分なディレクトリを検索し、インストールが成功しています
(8)スタートnginxの:は/ usr /サーバ/ nginxの/ sbinに/ nginxの(実際には、私たちすることができますより良いシステム設定、環境変数、コンフィギュレーション・データを直接のnginxの良いコマンドの後)
VI。構造の簡単な例のアンチブラシ(ホワイトリスト)
1.まず、example.luaより良いと呼ばれるの/ usr /サーバ/ nginxの/ confに/ディレクトリに私たち自身の簡単なLUAファイルを作成することができます。
次のコマンドを入力し、私たちはあるexample.confファイルを作成することができ、あるいは我々はnginx.confあるexample.confかは、mkdirあるexample.confをcpはでき
2.次に、私たちはこのスタートアップコンフィギュレーションファイルを編集する必要がありnginx.conf
[OK]を、私たちは編集インターフェースに入り、その後、私たちは、httpで次のコマンドnginx.confの体を追加し、私たちの中にあるexample.confファイルに導入する必要がありますあるexample.confが含まれます
次のようにNginx.conf具体的な内容は以下のとおりです。
あなたは赤いボックスを見ることができ、独自のプロジェクトドキュメントやLuaのモジュールを導入するの導入です。
3.次に、我々はロジックがあるexample.confファイルに実装されて書くことができます
4.私たちは、これはコンテンツLUAスクリプトステージに埋め込ま見ることができる、内部あるexample.confロケーションサーバ複数の、それを参照して、埋め込み位置content_by_lua_fileの/usr/example/lua/redis_black_limit.luaできそれは私たちが行くと対応するコードを参照してください応答内容は、対処する方法ですました。
これは私が内部から複数のIP、Redisの値を午前、我々が見ることができる抗ブラシデモ、である、そして抗ブラシ機能を実行するには、ip要求を照合することによって、加えて、ステートメントがあります私たちは私たちのクラスローダ、Class.forNameのに相当する、必要なので、Luaのモジュールの負荷に来るんことに気づきました。
5. 除此之外,还简单的做了一个设置黑名单和取消黑名单的功能,用来充当我们以后的管理中心,具体逻辑写在set_black.lua和cancel.lua中,然后在lua.conf中配置好url,具体如下图所示:
在lua.conf中server体里加入一下代码:
接下来我们需要写set_black.lua和cancel.lua文件,文件内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
v
set_black.lua:
local
redis =require
"resty.redis"
local
cache =redis.new()
cache:set_timeout(6000)
local
ok,err=cache.connect(cache,
'192.168.150.61'
,6379)
if
not ok
then
ngx.say(
"failed to connect:"
,err)
return
end
local
ip = ngx.var.remote_addr
cache:
set
(
"user:"
..ip..
":block"
,1)
ngx.say(
"user:"
..ip..
":block"
..
"设置黑名单成功"
)
|
1
2
3
4
5
6
7
8
9
10
11
12
|
v
cancel_black.lua:
local
redis =require
"resty.redis"
local
cache =redis.new()
cache:set_timeout(6000)
local
ok,err=cache.connect(cache,
'192.168.150.61'
,6379)
if
not ok
then
ngx.say(
"failed to connect:"
,err)
return
end
local
ip = ngx.var.remote_addr
cache:expire(
"user:"
..ip..
":block"
,0)
ngx.say(
"user:"
..ip..
":block"
..
"移除黑名单"
)
|
7. 效果
做好了以上配置,我们可以开始先设置好黑名单,然后访问请求,返回的结果是被黑名单了,然后再取消黑名单,再访问请求,显示访问成功。
其他例子:https://www.cnblogs.com/digdeep/p/4859575.html