|
|||||||
Использование Lua в Nginx
Время создания: 13.07.2018 15:31
Текстовые метки: nginx lua config
Раздел: Nginx
Запись: Velonski/mytetra-database/master/base/151780566706cw5e6ab5/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Openresty, большой набор модулей для Nginx'a, открывает много возможностей для разработки прямо на популярном Web сервере. Одним из главных достоинств этого пакета является расширение для поддержки языка Lua в Nginx. Установка В Debian системах все, что нужно, есть в пакете: apt-get install nginx-extras
Hello world Выведем hello world: server {
location /hello {
default_type 'text/plain';
content_by_lua '
ngx.say("Hello world!")
';
}
}
# Выведем известную строку прямо с помощью Nginx'a Теперь перезапустим Nginx: nginx -s reload
И по адресу http://сайт/hello увидим: Hello world!
Вывод HTML Чтобы вывести HTML достаточно заменить тип контента и указать сам контент: server {
location /hello {
default_type 'text/html'; content_by_lua '
ngx.say("Hello <b>world</b>!") ';
}
}
# Выводим HTML из Nginx Lua Организация кода Для удобства стоит использовать внешние Lua файлы: server {
location / {
default_type 'text/plain';
content_by_lua_file /var/www/lua/index.lua; # Отключим кэширование кода для разработки
# (это нужно закомментировать, когда выкатим на продакшн)
lua_code_cache off;
}
}
# загрузка Lua кода из внешних файлов Во время разработки удобно использовать lua_code_cache, т.к. код файла можно будет менять без перезапуска Nginx'a. Несколько обработчиков server {
location / { default_type 'text/plain';
content_by_lua_file /var/www/lua/index.lua;
}
location /admin { default_type 'text/plain';
content_by_lua_file /var/www/lua/admin.lua;
}
}
Глобальные переменные Для настроек и статистики удобно использовать глобальные переменные (они будут иметь одинаковые значения для всех запросов): http {
# объявляем глобальный контейнер
lua_shared_dict stats 1m; server {
location / {
content_by_lua '
# увеличим переменную hits на 1 при каждом запросе
ngx.shared.stats:incr("hits", 1)
# выведем текущее значение
ngx.say(ngx.shared.stats:get("hits"))
';
}
}
}
# Используем глобальную переменную для подсчета количества запросов Работа с данными Nginx поддерживает работу с разными базами данных, в т.ч. Mysql и Redis. apt-get install lua-nginx-redis
Пример простого скрипта для подсчета количества запросов в Redis'e: server {
location / {
content_by_lua '
local redis = require "nginx.redis"
local red = redis:new()
local ok, err = red:connect("127.0.0.1", 6379)
ok, err = red:incr("test")
local res, err = red:get("test")
ngx.say("hits: ", res)
';
}
}
# Увеличиваем счетчик test с помощью Redis Самое главное Openresty позволяет использовать Nginx не просто как Web сервер, а как полноценную платформу. С помощью Lua можно реализовать большой набор функционала, в т.ч. и работу с данными. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|