Heim >Backend-Entwicklung >PHP-Tutorial >In Nginx eingebettetes Lua-Skript, das in Verbindung mit Redis verwendet wird

In Nginx eingebettetes Lua-Skript, das in Verbindung mit Redis verwendet wird

WBOY
WBOYOriginal
2016-08-08 09:23:161221Durchsuche

Das in 0x00 Nginx eingebettete Lua-Skript verfügt über die folgenden Funktionen:

  • 20.000 gleichzeitige Verbindungen

  • Das Lua-Skript kann auf Nignx ausgeführt werden 11 Verschiedene Ebenen spielen bei der Erweiterung der Ngnix-Funktionen eine Rolle

  • Lua ist extrem schnell (Registrierungsanweisungen)

0x01-Anwendungsszenario

  • Anforderungsfilterung auf der Webserverseite durchführen (z. B. WAF, Anti CC usw.)

0x02 Einfacher Konfigurationsprozess

  1. Testumgebung Ubuntu Server 14.04.2 LTS

  2. Mehrere Module, die heruntergeladen werden müssen (achten Sie auf die Installationsreihenfolge und Probleme mit dem Exportpfad)

  • Nginx 1.7.4

  • LuaJIT-2.0.4 (Ein Just-In-Time-Compiler für Lua)

  • ngx_devel_kit( Nginx Development Kit)

  • echo-nginx-module( mehr Extras im Shell-Stil zur Nginx-Konfigurationsdatei)

  • lua-nginx-module(Embed die Kraft von Lua in Nginx)

0x03 Das mögliche Problem ist, dass lua.h nicht gefunden werden kann usw., weil die lib und inc von luaJIT nicht in den Umgebungsvariablen konfiguriert sind

Sie müssen es wie folgt konfigurieren (Ihr tatsächlicher lokaler Pfad):

export LUAJIT_LIB=/usr/lib/lua

export LUAJIT_INC=/usr/local/include/ luajit-2.0

cp /usr/local/include/luajit-/* /usr/local/include/


Falls vorhanden In einer Situation, in der der Dienst nicht gestartet werden kann, kann der Dienst Tail /var/log/syslog anzeigen Fehler anzeigen

Wenn Nginx nicht gestartet werden kann, können Sie Tail /var/cache/nginx/error.log anzeigen

Wenn die Nginx-Bin-Datei generiert wurde, können Sie mit nginx -V überprüfen, ob die Konfigurationsdatei korrekt ist


Wenn die Folgende Module fehlen:

PCRE

sudo apt-get install libpcre3 libpcre3-dev

zlib

sudo apt-get install zlib1g- dev

openssl

sudo apt -get install libssl-dev

ps: Bitte achten Sie insbesondere darauf, nicht die neueste Version herunterzuladen Version von Nginx. Die oben genannten Modulschnittstellen werden möglicherweise nicht unterstützt. daher werde ich hier nicht auf Details eingehen

0x04 Nach der Installation


Ändern Sie die Datei nginx.conf (Standardpfad/etc/nginx/nginx.conf):

Lua-Code hinzufügen


  1. Nginx-Konfiguration neu laden

sudo /etc/nginx/ sbin/nginx -s reload

Wirkung:


2. Lua-Datei hinzufügen:

Zwei lua_package_path, lua_code_cache hinzufügen (um nicht Um den Lua-Cache beizubehalten und das Debuggen zu erleichtern, muss er im tatsächlichen Projekt geöffnet werden)

Verzeichnis der gesamten Lua-Datei (beachten Sie, dass die Dateien im Lua-Ordner sind neu erstellt als nächstes):

/etc/nginx/lua/hello.lua

/etc/nginx/lua/hello_redis.lua

/etc/nginx/lua/redis.lua

nginx.conf-Datei hinzugefügt:



hello.lua-Dateiinhalt:


ngx.header.content_type = " text/plain";


ngx.say("say hello from hello.lua");

Alle hinzugefügten Standortcodes:


Laden Sie dann Nginx neu, um den Effekt zu sehen.

3. Verwenden Sie Redis (das dritte neu hinzugefügte Redis):



Die Prämisse ist, dass auf dem Computer bereits ein Redis-Server vorhanden ist, um ihn unter Ubuntu zu installieren: sudo apt-get install redis-server

    

    hello_redis.lua 内容:

    

    local redis = require "redis"

    

    localer Cache = redis.new()

    

    local ok, err = cache.connect(cache, '127.0.0.1', '6379')

    

    cache:set_timeout(60000)

    

    Wenn nicht ok, dann

ngx.say("failed to connect:", err)

            return

    end

    

    res, err = Cache:set( "hello", "redis in nginx_inline_lua")

    Wenn nicht ok, dann

            ngx.say("failed to set hello: ", err)

            return

    end

    

    ngx.say("set result: ", res)

    

    local res, err = cache:get("hello")

    if not res then

            ngx.say("failed to get hello: ", err)

            return

    end


    

    ngx.say("hello: ", res)

    local ok, err = cache:close()

    

    Wenn nicht ok, dann

        ngx.say("failed to close:", err)

        return

Ende


    

    效果:

    

0x05 现在为止,简单的一个在Nginx. 中Ich habe Lua kennengelernt操作Redis的过程已经完成了, 在配置时候可能有很多细小的问题, 但是不要放弃, 坚持下去, 相信你就会成功.


0xFF 附加资料:

    http:/ /wiki.nginx.org/HttpLuaModule

    http://openresty.org/ (最先完成Nginx内嵌Lua的Chinesisch)

    http://tengine.taobao.org/

转载请注明出处(个人论坛):http://www.byteway.net/thread-index-fid-4-tid-316.htm

Mit Nginx ausgestattet助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn