OpenResty Установка OpenResty на CentOS 7

OpenResty 

Установка OpenResty на CentOS 7

OpenResty® - это веб-сервер, являющийся некой версией Nginx с расширенным функционалом. Кроме различных плюшек, он славится тем, что идет со встроенным LuaJIT - это самая быстрая реализация скриптового языка программирования Lua. Иными словами, после установки Вы сможете программировать на языке Lua и выполнять этот код в Nginx!

В этой статье мы рассмотрим установку OpenResty на CentOS 7, после чего установим lua-resty-template - шаблонизатор для Lua и OpenResty, который повысит удобство при разработке. Также выполним несколько примеров на Lua.

Примечание: установку OpenResty желательно выполнять в систему, на которой не установлен Nginx!

Установим необходимые пакеты, если они еще не установлены:
yum -y install gcc pcre-devel zlib-devel openssl-devel gd gd-devel wget curl perl unzip zip perl-Digest-MD5

Далее настроим OpenResty с регулярными выражениями PCRE, поддержкой IPv6 и некоторыми другими модулями Nginx (перед установкой проверьте последнюю версию на сайте openresty.org):

Bash:
wget https://openresty.org/download/openresty-1.19.9.1.tar.gz
tar -xvf openresty-1.19.9.1.tar.gz
cd openresty-1.19.9.1/
./configure -j2 --with-pcre-jit --with-ipv6 --with-http_iconv_module --with-http_image_filter_module --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream_realip_module
make -j2 && sudo make install
export PATH=/usr/local/openresty/bin:/usr/local/openresty/nginx/sbin:/usr/local/openresty/luajit/bin:$PATH
sed -i 's~export PATH~export PATH=/usr/local/openresty/bin\:/usr/local/openresty/nginx/sbin\:/usr/local/openresty/luajit/bin\:\$PATH\nexport PATH~g' /etc/profile
Если все прошло без ошибок, то проверим, что openresty установлен: openresty -v или nginx -v

Запустить openresty можно следующей командой:
sudo /usr/local/openresty/bin/openresty

Остановить так:
sudo /usr/local/openresty/bin/openresty -s quit

Теперь создадим сервис для openresty, чтобы к нему можно было обращаться через systemctl и чтобы он запускался автоматически при перезапуске сервера:
Bash:
printf "[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/openresty/nginx/logs/nginx.pid
ExecStartPre=/usr/local/openresty/bin/openresty -t
ExecStart=/usr/local/openresty/bin/openresty
ExecReload=/bin/kill -s HUP \$MAINPID
ExecStop=/bin/kill -s QUIT \$MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
" > /usr/lib/systemd/system/nginx.service
Далее:
Bash:
systemctl enable nginx
systemctl start nginx
Перезагрузить конфигурацию Nginx можно такой командой:
nginx -s reload

Теперь, если в браузере перейти на http://ваш_ip, то должна появиться страница с приветствием:
Welcome to OpenResty!

Установим lua-resty-template:
Код:
opm get bungle/lua-resty-template
Подробное описание шаблонизатора смотрите здесь:

И так, у вас установлен OpenResty и вы теперь можете конфигурировать веб-сервер так, как вы это привыкли делать на Nginx.
Файл конфига находится здесь: /usr/local/openresty/nginx/conf/nginx.conf - откройте его и давайте, скорее уже, напишем что-нибудь на Lua! :)

Добавьте новый локейшн:
Hello, World!:
location = /test {
    default_type 'text/plain';
    content_by_lua_block {
        ngx.say('Hello, World!')
    }
}
перезагрузите конфигурацию:
nginx -s reload
и перейдите http://ваш_ip/test - в результате вы должны увидеть "Hello, World!"

Теперь, вместо content_by_lua_block, подключим файл index.lua, в котором будем выполнять lua-код. Создайте файл /usr/local/openresty/nginx/html/index.lua:
Hello, Anonymous!:
local name = ngx.var.arg_name or "Anonymous"
ngx.say("Hello, ", name, "!")
В нем говорится, что если в урле передать параметр name, то этот параметр отобразится в браузере. Если перейти без параметра, то выведет "Hello, Anonymous!"

И изменим локейшн:
NGINX:
location = /test {
        default_type 'text/plain';
        lua_code_cache off;
        content_by_lua_file /usr/local/openresty/nginx/html/index.lua;
}
Обратите внимание на 3-ю строку lua_code_cache off; - она говорит, что любые изменения в файле index.lua будут применяться "на лету", без необходимости перезагружать конфигурацию Nginx. Но для применения изменений в nginx.conf перезагрузить конфигурацию все же нужно:
nginx -s reload
В результате консоль выдаст предупреждение, что использование lua_code_cache is off; снизит производительность:
Код:
nginx: [alert] lua_code_cache is off; this will hurt performance in /usr/local/openresty/nginx/conf/nginx.conf:77
Поэтому в реальных условиях использовать ее не рекомендуется.

Проверим работу http://ваш_ip/test?name=John

Чтобы повысить удобство при веб-разработке подключим шаблонизатор lua-resty-template. Для этого создайте новый файл /usr/local/openresty/nginx/html/view.html с таким содержимым:
HTML:
<!DOCTYPE html>
<html>
<body>
  <h1>{{message}}</h1>
</body>
</html>
И измените файл index.lua (2 варианта использования = один результат):
1-й вариант:
local template = require "resty.template"
-- Using template.render:
template.render("view.html", {
    message = "Hello, World!"
})
2-й вариант:
local template = require "resty.template"
-- Using template.new:
local view = template.new "view.html"
view.message = "Hello, World!"
view:render()
При этом, перезагружать конфигурацию Nginx не нужно, т.к. в nginx.conf мы ранее добавили строку lua_code_cache off;

Остальные директивы OpenResty смотрите здесь:

Модули здесь:

А теперь я пожелаю Вам дальнейшего приятного погружения в мир OpenResty и Lua :)

 
Последнее редактирование:

Популярные теги

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно.
Вам необходимо обновить браузер или попробовать использовать другой.

Сверху