Heim > Backend-Entwicklung > PHP-Tutorial > Nginx-Tutorial

Nginx-Tutorial

WBOY
Freigeben: 2016-08-08 09:23:27
Original
1258 Leute haben es durchsucht

Nginx und Lua

Zitate von Fire Cloud Evil God: In den Kampfkünsten der Welt ist nichts unzerbrechlich, nur Geschwindigkeit! Die Spezialität von Nginx ist Geschwindigkeit, und die Spezialität von Lua ist Geschwindigkeit. Die Kombination der beiden hat zweifellos einen genetischen Geschwindigkeitsvorteil.

Der erste, der Nginx und Lua kombinierte, war OpenResty, das über ein ngx_lua-Modul verfügt, das Lua in Nginx einbettet; dann enthielt Tengine auch das ngx_lua-Modul. Was den Unterschied zwischen den beiden betrifft: OpenResty ist das Bundle von Nginx; während Tengine der Fork von Nginx ist. Es ist erwähnenswert, dass OpenResty und Tengine beide von Chinesen erstellte Projekte sind. Ersteres wird hauptsächlich von Chun Ge und Xiaozhe entwickelt, und letzteres wird hauptsächlich von Taobao verwaltet.

Was die Vor- und Nachteile von OpenResty und Tengine angeht, bleibt es jedem überlassen, selbst zu urteilen. Die folgenden Informationen stehen als Referenz zur Verfügung:

  • ngx_openresty: ein von Lua geklebtes Nginx-Ökosystem
  • Anwendungs-, Anpassungs- und Entwicklungspraxis von Taobao Nginx

Empfehlenswert ist die Lektüre des Artikels von Chun Ge im Tech-Club über „Die von Lua geklebte ökologische Nginx-Umgebung“ '' s Redeaufzeichnung, es gibt Informationen!

Installation

erfordert die neueste Version von Nginx, LuaJIT, ngx_devel_kit, ngx_lua und anderen Installationsdateien.

Die Installation von Lua oder LuaJIT ist möglich, aus Effizienzgründen wird jedoch die Installation von LuaJIT empfohlen.

shell> wget http://luajit.org/download/LuaJIT-.tar.gz shell> tar zxvf LuaJIT-.tar.gz shell> cd LuaJIT- shell> make shell> make install

Da es im Standardpfad installiert ist, befinden sich die lib und das Include, die LuaJIT entsprechen, alle im Verzeichnis /usr/local.

shell> export LUAJIT_LIB=/usr/local/lib shell> export LUAJIT_INC=/usr/local/include/luajit-

Jetzt können Sie Nginx kompilieren:

shell> wget http://nginx.org/download/nginx-.tar.gz shell> tar zxvf nginx-.tar.gz shell> cd nginx- shell> ./configure --add-module=/path/to/ngx_lua \ --add-module=/path/to/ngx_devel_kit shell> make shell> make install

Versuchen Sie, Nginx zu starten und sehen Sie, ob Sie Pech haben. Möglicherweise tritt die folgende Fehlermeldung auf:

Freigegebene Objektdatei kann nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis

Ist das eine seltsame Situation? Sie können den Befehl ldd verwenden, um Folgendes zu überprüfen:

shell> ldd /path/to/nginx libluajit-.so => not found

Solche Probleme können normalerweise mit dem Befehl ldconfig gelöst werden:

shell> echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf shell> ldconfig

Versuchen Sie, Nginx erneut zu starten, und es sollte in Ordnung sein.

Anwendung

Lassen Sie uns die Dinge zunächst mit einem einfachen Programm aufwärmen: Fügen Sie den folgenden Code zur Nginx-Konfigurationsdatei nginx.conf hinzu, starten Sie Nginx neu und durchsuchen Sie dann. Sie können sehen, dass es funktioniert hat.

location /lua { set $test "hello, world."; content_by_lua ' ngx.header.content_type = "text/plain"; ngx.say(ngx.var.test); '; }

Bevor Sie ngx_lua eingehend lernen, wird empfohlen, das von Bruder Chun verfasste Nginx-Tutorial sorgfältig zu lesen.

Hier werde ich über den entscheidenden Punkt sprechen: Die in der Nginx-Konfigurationsdatei verwendete Sprache ist im Wesentlichen „deklarativ“ und nicht „prozedural“. Wenn Nginx eine Anfrage verarbeitet, wird die Ausführung von Anweisungen nicht durch die physische Reihenfolge bestimmt, in der die Anweisungen definiert werden, sondern hängt von der Phase ab, zu der die Anweisungen gehören. Die in Nginx häufig verwendeten Phasen sind: Rewrite-Phase, Zugriffsphase, Inhaltsphase , usw. . Die set-Anweisung im Democode gehört zur Rewrite-Phase und die content_by_lua-Anweisung gehört zur Content-Phase. Wenn Sie versuchen, die Reihenfolge der beiden Anweisungen zu vertauschen, werden Sie feststellen, dass das Programm weiterhin normal ausgeführt werden kann.

Versuchen wir, ein praktischeres Beispiel mit Redis zu schreiben.

Zuerst müssen wir eine Redis-Konfigurationsdatei config.json mit folgendem Inhalt erstellen:

{ "host": "", "port": "" }

Dann erstellen wir ein Skript init.lua, das die Konfigurationsdatei analysiert, die verwendet wird Lua CJSON-Modul:

local cjson = require "cjson"; local config = ngx.shared.config; local file = io.open("config.json", "r"); local content = cjson.decode(file:read("*all")); file:close(); for name, value in pairs(content) do config:set(name, value); end

Beschreibung: Im Code wird Shared Memory verwendet, sodass Sie nicht bei jeder Anfrage die Konfigurationsdatei analysieren müssen.

Als nächstes erstellen wir ein Skript content.lua, das Inhalte mithilfe von Resty rendert Redis-Modul:

ngx.header.content_type = "text/plain"; local redis = require "resty.redis"; local config = ngx.shared.config; local instance = redis:new(); local host = config:get("host"); local port = config:get("port"); local ok, err = instance:connect(host, port); if not ok then ngx.log(ngx.ERR, err); ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE); end instance:set("name", "laowang"); local name = instance:get("name") instance:close(); ngx.say("name: ", name);

Hinweis: Es wird empfohlen, das Resty Redis-Modul im Herstellerverzeichnis abzulegen und es später in Nginx einzurichten.

Zuletzt müssen wir es in der Nginx-Konfigurationsdatei einrichten:

lua_shared_dict config 1m; lua_package_path "/path/to/vendor/?.lua;;"; init_by_lua_file /path/to/init.lua; server { lua_code_cache off; location /lua { content_by_lua_file /path/to/content.lua; } ... }

Hinweis: Um das Debuggen zu erleichtern, habe ich lua_code_cache deaktiviert. Wenn es sich um eine Produktionsumgebung handelt, sollte dies der Fall sein eingeschaltet.

Außerdem müssen Sie bei der Installation von CJSON auf den Pfad der Header-Datei im Makefile achten. Der Standardwert ist:

PREFIX = /usr/local LUA_INCLUDE_DIR = $(PREFIX)/include

Wenn Sie LuaJIT installieren, ist dies der Fall Am besten kopieren Sie die Header-Datei in das entsprechende Verzeichnis:

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

Ein Projekt, an dem ich kürzlich teilgenommen habe, stellt einige Schnittstellen für Web-Polling bereit, die alle mit Nginx+Lua implementiert sind, obwohl dort Insgesamt sind es nur ein Dutzend. Der Server kann jeden Tag Milliarden von Anfragen bereitstellen, was sehr leistungsstark ist.

Lassen Sie mich abschließend ein Zitat eines Verlierers zitieren: Lua ist der Favorit unverheirateter männlicher Programmierer.

Dieser Eintrag wurde von Lao Wang in der Kategorie „Technisch“ veröffentlicht und mit Lua und Nginx getaggt. Permalink zu Favoriten hinzufügen.

Es gibt 29 Kommentare zu „NGINX und LUA


Das Obige hat das Nginx-Tutorial vorgestellt, einschließlich verschiedener Aspekte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage