После этого поста об использовании Lua для увеличения гибкости nginx и для уменьшения нагрузки на веб-стек мне любопытно узнать, как люди используют Lua для расширения возможностей nginx.
Есть ли заметные хаки, оптимизации и наблюдения с использованием Lua? Хаки, которые люди использовали для обнаружения возможностей Nginx, которые в противном случае были бы сложны / невозможны с веб-сервером или обратным прокси?
Редактировать:
Ссылки:
http://thechangelog.com/post/3249294699/super-nginx-killer-build-of-nginx-build-for-luajit-plus
http://skillsmatter.com/podcast/home/scripting-nginx-with-lua/te-4729
http://devblog.mixlr.com/2012/06/26/how-we-use-nginx-lua-and-redis-to-beta-ify-mixlr/
Ранее мы написали решение, которое динамически получает корень документа на основе указанного домена или псевдонима домена. Он использует базу данных mysql для хранения сопоставлений доменных имен и псевдонимов. Ссылка на это http://www.logicwreck.com/index.php/2012/09/11/dynamic-hosts-for-nginx-with-database-storage-of-domain-and-alias-info/
Довольно интересный способ взлома, так как он может помешать вам иметь несколько настроенных виртуальных хостов и вместо этого иметь только один.
В моем корневом решении для документов также используется Lua, но вместо базы данных используется сценарий bash. Короче говоря, он меняет местами части домена и использует их в качестве структуры каталогов. В этой структуре каталоги с префиксом _ могут использоваться для различения корней документов от поддоменов.
например domain.com -> com / domain / _public sub.domain.com -> com / domain / sub / _public
server_name _ ~^(?<www>www\.)?(?<domain>[a-zA-Z0-9-\.]+)$;
set_by_lua $docRoot "
local f = assert(io.popen('/path/to/conversion/script.sh '..ngx.var.domain, 'r'))
local s = assert(f:read('*a'))
f:close()
return s
";
root /var/www/$docRoot/_public;
Тогда мой сценарий преобразования:
echo $1 | tr "." "\n" | tac | tr "\n" "/" | rev | cut -b 2- | rev | tr -d "\n"
Cut удаляет дополнительную косую черту, в то время как последний tr необходим, потому что наличие новой строки в корне nginx обрезает / _public
Я без проблем управляю десятками таких доменов. Это может быть медленнее, чем генератор конфигурации на основе шаблона для каждого домена, но я предпочитаю иметь один файл для устранения неполадок.