آموزش سرور

وب سرور OpenResty چیست؟ + قابلیت پویاسازی تنظیمات Nginx و اسکریپت‌های Lua

OpenResty یک وب سرور پیشرفته است که بر پایه NGINX ساخته شده و امکانات بسیار زیادی را ارائه می‌دهد. این وب سرور شامل یک کامپایلر LuaJIT است که به شما امکان می‌دهد اسکریپت‌های Lua را درون تنظیمات سرور خود اجرا کنید. علاوه بر این، OpenResty همراه با مجموعه‌ای از ماژول‌های Lua و NGINX ارائه می‌شود که به شما کمک می‌کنند تا برنامه‌های وب خود را به راحتی مقیاس‌پذیر کنید.

در این راهنما، شما همه چیز را درباره وب سرور OpenResty یاد خواهید گرفت، از جمله نحوه نصب و شروع به کار با آن روی سیستم خود.

فهرست مطالب

اگر اولین باری است که این وب سرور را نصب می‌کنید، یک حساب کاربری در Linode ایجاد کنید و یک نمونه Compute Instance بسازید. همچنین، برای این کار نیاز به به‌روزرسانی سیستم خود خواهید داشت. ممکن است نیاز باشد منطقه زمانی را نیز تنظیم کنید. همچنین باید نام میزبان را پیکربندی کنید، یک حساب کاربری محدود ایجاد کنید و دسترسی SSH را تقویت کنید.

توجه: دستورات این راهنما برای کاربران غیر روت نوشته شده‌اند. دستوراتی که نیاز به دسترسی بالاتر دارند، با sudo شروع می‌شوند.

وب سرور OpenResty

OpenResty یک پلتفرم وب سرور است که برای توسعه NGINX استفاده می‌شود. این وب سرور شامل نسخه پیشرفته‌ای از NGINX و یک کامپایلر LuaJIT پیشرفته است. همچنین، مجموعه‌ای از ماژول‌های NGINX و کتابخانه‌های Lua برای میزبانی پیشرفته برنامه‌های وب در آن گنجانده شده‌است. OpenResty برای ارتقاء مقیاس‌پذیری برنامه‌های وب طراحی شده‌است و به شما کمک می‌کند تا سرور خود را به راحتی مقیاس‌پذیر کنید و سرویس‌ها و گیت‌های پویا به آن اضافه کنید.

OpenResty در فضایی رقابت می‌کند که ابزارهای محبوبی مانند NGINX و Apache حضور دارند. با این وجود، وب سرور OpenResty هسته NGINX را به ارث می‌برد و یک کامپایلر LuaJIT نیز به آن اضافه می‌کند که امکان اجرای اسکریپت‌های Lua در تنظیمات سرور را فراهم می‌کند. این قابلیت تعداد اتصالات همزمانی که یک سرور NGINX می‌تواند مدیریت کند را به شدت افزایش می‌دهد.

علاوه بر این، OpenResty مجموعه‌ای از ابزارهای مفید NGINX را برای میزبانی برنامه‌های وب در خود دارد. این اجزا شامل ماژول‌هایی هستند که به شما اجازه می‌دهند به صورت non-blocking با پایگاه‌ داده‌ هایی مانند Redis، MySQL و Memcached و حتی دیتابیس postgreSQL ارتباط برقرار کنید. به این ترتیب، می‌توانید برنامه‌های وب سریع‌تر و بهینه‌تری بسازید.

با این حال، برخی از موارد ممکن است نیازی به ویژگی‌های اضافی OpenResty نداشته باشند. در چنین مواردی، تغییر از NGINX به OpenResty ضروری نیست، اگرچه OpenResty می‌تواند همچنان از هسته NGINX استفاده کند.

وب سرور OpenResty بسته‌های رسمی برای اکثر توزیع‌های اصلی لینوکس ارائه می‌دهد و معمولاً از طریق package manager سیستم شما قابل دسترسی است. اگر package manager شما OpenResty را ندارد، می‌توانید ریپازیتوری OpenResty را به package manager خود اضافه کنید و آن را نصب کنید.

این راهنما به شما کمک می‌کند تا OpenResty را روی سیستم خود نصب کرده و از ویژگی‌های پیشرفته آن برای میزبانی و مقیاس‌پذیری برنامه‌های وب خود استفاده کنید.

قبل از نصب OpenResty، اگر NGINX روی سیستم شما نصب است، باید آن را به کمک دستورات زیر متوقف و غیرفعال کنید:

sudo systemctl disable nginx
sudo systemctl stop nginx

برای نصب وب سرور OpenResty روی سیستم‌های Debian و Ubuntu، مراحل زیر را دنبال کنید:

  1. نصب بسته‌های مورد نیاز: ابتدا باید بسته‌های لازم را با استفاده از فرمان زیر نصب کنید:
sudo apt install --no-install-recommends wget gnupg ca-certificates
  1. اضافه کردن کلید GPG: برای اضافه کردن کلید GPG ریپازیتوری OpenResty، از فرمان زیر استفاده کنید. این فرمان برای نسخه‌های Debian و Ubuntu قبل از 22 است:
wget -O - https://openresty.org/package/pubkey.gpg | sudo apt-key add -

اگر از Ubuntu 22 یا نسخه‌های جدیدتر استفاده می‌کنید، از این فرمان استفاده کنید:

wget -O - https://openresty.org/package/pubkey.gpg | sudo gpg --dearmor -o /usr/share/keyrings/openresty.gpg
  1. اضافه کردن ریپازیتوری OpenResty: بسته به توزیع و نسخه سیستم‌عامل‌تان، باید ریپازیتوری OpenResty را به APT اضافه کنید.
  • برای سیستم‌های Debian:
codename=`grep -Po 'VERSION="[0-9]+ \(\K[^)]+' /etc/os-release`
echo "deb http://openresty.org/package/debian $codename openresty" | sudo tee /etc/apt/sources.list.d/openresty.list
  • برای نسخه‌های Ubuntu قبل از 22:
echo "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/openresty.list
  • برای Ubuntu 22 و نسخه‌های جدیدتر:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/openresty.gpg] http://openresty.org/package/ubuntu $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/openresty.list > /dev/null
  1. به‌روزرسانی و نصب OpenResty: حالا باید فهرست بسته‌ها را به‌روزرسانی کنید و OpenResty را نصب کنید:
sudo apt update
sudo apt install openresty

5. بررسی موفقیت نصب: برای اطمینان از اینکه نصب موفقیت‌آمیز بوده، وضعیت سرویس OpenResty را به کمک دستور زیر بررسی کنید:

sudo systemctl status openresty

برای نصب OpenResty روی سیستم‌های CentOS یا Fedora، مراحل زیر را دنبال کنید:

توجه: این دستورالعمل‌ها برای CentOS 8 یا نسخه‌های جدیدتر نوشته شده‌اند. اگر از CentOS 6 یا 7 استفاده می‌کنید، به جای dnf از yum در دستورات زیر استفاده کنید.

  1. نصب wget: ابتدا مطمئن شوید که بسته wget روی سیستم شما نصب شده است. اگر نصب نیست، آن را با فرمان زیر نصب کنید:
sudo dnf install wget
  1. اضافه کردن ریپازیتوری OpenResty: ریپازیتوری OpenResty را اضافه کنید. اگر از توزیع Fedora استفاده می‌کنید، در خط اول centos را با fedora جایگزین کنید:
wget https://openresty.org/package/centos/openresty.repo
sudo mv openresty.repo /etc/yum.repos.d/
  1. به‌روزرسانی و نصب OpenResty: فهرست بسته‌ها را به‌روزرسانی کنید و سپس OpenResty را نصب کنید:
sudo dnf check-update
sudo dnf install openresty
  1. شروع و فعال‌سازی سرویس OpenResty: سرویس OpenResty را شروع کنید و آن را طوری تنظیم کنید که با راه‌اندازی سیستم به‌طور خودکار شروع شود:
sudo systemctl start openresty
sudo systemctl enable openresty

5.بررسی موفقیت نصب: برای اطمینان از اینکه نصب موفقیت‌آمیز بوده، وضعیت سرویس OpenResty را بررسی کنید:

sudo systemctl status openresty
وب سرور OpenResty

حالا که OpenResty را نصب و راه‌اندازی کرده‌اید، می‌توانید چند نمونه را امتحان کنید.

  1. باز کردن پورت HTTP: این راهنما از پورت استاندارد HTTP (پورت 80) برای مثال‌ها استفاده می‌کند. برای اینکه بتوانید این مثال‌ها را دنبال کنید، باید این پورت را در سیستم خود باز کنید. در بخش فایروال، دستورالعمل‌های مرتبط را برای باز کردن پورت HTTP دنبال کنید.
  2. صفحه خوش آمد گویی OpenResty: به‌طور پیش‌فرض، OpenResty یک صفحه خوش آمد گویی ساده نمایش می‌دهد، مشابه صفحه پیش‌فرض NGINX. برای دسترسی به این صفحه، باید آدرس IP عمومی سرور خود را در یک مرورگر وب وارد کنید. به عنوان مثال، اگر آدرس IP سرور شما 192.0.2.0 باشد، در مرورگر خود به http://192.0.2.0 بروید.
  3. اجرای اسکریپت‌های Lua: یکی از ویژگی‌های جذاب OpenResty این است که می‌تواند اسکریپت‌های Lua را در تنظیمات سرور خود اجرا کند. در مثال زیر، این ویژگی با ایجاد یک سرور با اسکریپت‌نویسی پایه Lua نشان داده شده است.
  4. ویرایش فایل پیکربندی: با استفاده از ویرایشگر متن مورد علاقه‌تان، فایل nginx.conf مربوط به نمونه OpenResty خود را باز کنید. این فایل شامل تنظیمات پیش‌فرض سرور OpenResty است و معمولاً در آدرس /usr/local/openresty/nginx/conf/nginx.conf قرار دارد.
  5. جایگزینی محتویات فایل: محتویات فایل را پاک کرده و با کدی که در راهنما ارائه شده است جایگزین کنید. (OpenResty معمولاً یک نسخه کپی از فایل پیکربندی پیش‌فرض به نام nginx.conf.default دارد، که در صورت نیاز به بازگشت به آن می‌توانید از آن استفاده کنید).
worker_processes 1;

events {
    worker_connections 1024;
}


http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;

    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name localhost;

        root html;
        index index.html index.htm;

        location / {
            try_files $uri $uri/ =404;
        }

        location /content-test {
            default_type text/html;
            content_by_lua_block {
                ngx.say('<html><body><p>Hello, world!</p></body></html>')
            }
        }

        location /rest-test {
            charset utf-8;
            charset_types application/json;
            default_type application/json;
            content_by_lua_file scripts/rest.lua;
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }
}

این پیکربندی NGINX صفحه خوش آمد گویی پیش‌فرض که در مسیر ذکر شده قرار دارد را دست نخورده نگه می‌دارد و دو مسیر جدید به سرور اضافه می‌کند:

  • مسیر /content-test: این مسیر از یک بلوک کد Lua در فایل پیکربندی استفاده می‌کند تا محتوای ساده HTML را با پیام “Hello World” نمایش دهد. این مثال، هرچند کوتاه است، ایده‌ای از چگونگی ترکیب اسکریپت Lua با سرور OpenResty را به شما می‌دهد.
  • مسیر /rest-test: این مسیر شروع به نمایش دامنه وسیع‌تری از ویژگی‌های OpenResty می‌کند. این مسیر از یک فایل اسکریپت Lua استفاده می‌کند که در مراحل بعدی ایجاد می‌شود و داده‌های JSON را به کار می برد. در واقع، مدل این مسیر می‌تواند برای ایجاد یک سرویس API ساده به‌صورت کامل در OpenResty استفاده شود.
  1. ایجاد دایرکتوری برای فایل‌های اسکریپت Lua: برای سرور OpenResty خود یک دایرکتوری ایجاد کنید تا فایل‌های اسکریپت Lua را در آن نگه‌داری کنید. در این مثال، از یک زیرشاخه به نام scripts در دایرکتوری nginx برای OpenResty استفاده می‌شود.
mkdir /usr/local/openresty/nginx/scripts
  1. در دایرکتوری که قبلاً ایجاد کرده‌اید، یک فایل جدید به نام rest.lua بسازید. محتویات زیر را در این فایل بنویسید. این محتویات شامل کد های Lua است که عملکرد خاصی دارند. در کد، کامنت هایی وجود دارد که با -- شروع می‌شوند. این کامنت ها توضیح می‌دهند که هر بخش از این اسکریپت چه کاری انجام می‌دهد. این کار به شما کمک می‌کند تا به‌راحتی متوجه شوید که هر قسمت از کد چه وظیفه‌ای دارد.

File: /usr/local/openresty/nginx/scripts/rest.lua

-- Imports a module for handling JSON; cjson is included with OpenResty
-- by default.
local cjson = require("cjson")

-- Defines an initial status for the request.
ngx.status = ngx.HTTP_OK

-- Serves the JSON content, using the cjson module to encode the Lua
-- object as a JSON one.
ngx.say(cjson.encode(
    {
        name = "world",
        message = "Hello, ",
        punctuation = "!"
    }
))

-- Exits with the success status.
return ngx.exit(ngx.HTTP_OK)

حالا شما یک سرور وب OpenResty دارید که سه بخش دارد:

  1. صفحه خوش آمد گویی: این همان صفحه پیش‌فرض است که به‌طور خودکار نمایش داده می‌شود.
  2. صفحه HTML ساده: این صفحه شامل پیام “Hello world” است.
  3. سرور JSON: این سرور می‌تواند داده‌های JSON را ارائه دهد.

برای دیدن صفحه “Hello world” می‌توانید به مسیر /content-test در مرورگر وب خود بروید. به عنوان مثال، اگر آدرس IP عمومی سرور شما 192.0.2.0 باشد، باید در مرورگر خود به این آدرس بروید:

http://192.0.2.0/content-test

برای دیدن محتوای JSON که توسط سرور OpenResty شما ارائه می‌شود، به مسیر /rest-test در مرورگر وب خود بروید. اگر آدرس IP عمومی سرور شما 192.0.2.0 باشد، باید در مرورگر خود به این آدرس مراجعه کنید:

http://192.0.2.0/rest-test

با این کار، می‌توانید محتوای JSON را که سرور شما ایجاد کرده است مشاهده کنید.

{
  "name": "world",
  "message": "Hello, ",
  "punctuation": "!"
}

حالا که وب سرور OpenResty بر روی سیستم شما راه‌اندازی شده است، می‌توانید از آن برای ارائه برنامه‌های وب خود استفاده کنید. OpenResty به‌طور کلی می‌تواند به جای NGINX استفاده شود و معمولاً تغییرات کمی در پیکربندی نیاز دارد. علاوه بر این، OpenResty ویژگی‌ها و ماژول‌های جدید زیادی را برای افزودن قابلیت‌های پویا و مقیاس‌پذیری به برنامه‌های شما ارائه می‌دهد.

منبع: linode.com

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا