Openresty, большой набор модулей для Nginx’a, открывает много возможностей для разработки прямо на популярном Web сервере.
Одним из главных достоинств этого пакета является расширение для поддержки языка Lua в Nginx.
В Debian системах все, что нужно, есть в пакете:
apt-get install nginx-extras
Выведем 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 достаточно заменить тип контента и указать сам контент:
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 можно реализовать большой набор функционала, в т.ч. и работу с данными.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…