NGINX چیست و چگونه کار میکند؟
NGINX، یک نرم افزار وب سرور متنباز است که به دلیل تطبیق پذیری و قابلیتهای پیشرفته خود متمایز است. علاوه بر ارائه صفحات وب، انجیناکس یک ابزار چندوجهی برای بهینه سازی عملکرد و امنیت وب سایت هم است.در چشم انداز اینترنت، نقش وب سرورها بسیار مهم شده است. بنابراین، درک NGINX برای هر کسی که با فناوری وب مرتبط است، چه برای پروژههای شخصی یا برنامههای سازمانی در مقیاس بزرگ، ضروری است.
NGINX چیست؟
انجیناکس (NGINX) یک وب سرور متنباز است که به دلیل عملکرد بالا و استفاده کم از منابع شناخته شده است. در ارائه محتوای استاتیک عالی است و به طور گسترده به عنوان لود بالانسر و به عنوان یک پروکسی معکوس استفاده میشود . انجیناکس با سیستم عاملهای مختلف سازگار است و از نقش سنتی یک وب سرور فراتر رفته است.
دو نسخه از NGINX وجود دارد:که عبارتند از NGINX Open Source و NGINX Plus
نسخه متنباز به طرز ماهرانهای ترافیک شبکه را مدیریت نموده و استفاده کارآمد از منابع را تضمین میکند و آن را به بهترین انتخاب برای اپلیکیشنهای وب مدرن تبدیل مینماید. نسخه تجاری NGINX Plus ، ویژگیهای اضافی مانند لود بالانسینگ پیشرفته، کش محتوا و بررسی سلامت را هم ارائه میدهد.
NGINX چگونه کار میکند؟
NGINX سرور، بر اساس معماری رویداد محور(event-driven)، مقیاس پذیر و ناهمزمان(asynchronous) عمل میکند. انجیناکس در هسته خود از یک فرآیند اصلی و چندین فرآیند worker استفاده مینماید. فرآیند اصلی فایلهای پیکربندی را خوانده و ارزیابی مینماید و فرآیندهای worker را مدیریت میکند. در همین حال، پردازشهای worker پردازش واقعی(actual) درخواستها را انجام میدهند.
برخلاف سرورهایی که برای هر درخواست فرآیند جدیدی ایجاد میکنند، فرآیندهای وُرکر NGINX میتوانند هزاران درخواست همزمان را بپذیرند. این امر سربار(overhead) را کاهش داده و ظرفیت انجیناکس را برای مدیریت ترافیک سنگین شبکه افزایش میدهد.
NGINX همچنین میتواند ترافیک ورودی و خروجی را به عنوان یک سرور پروکسی معکوس و API gateway مدیریت کند و به عنوان یک واسطه برای درخواستهای کلاینت که به دنبال منابع از سرورهای دیگر هستند عمل نماید. در این نقش، NGINX میتواند عملکردهایی مانند لود بالانسینگ، SSL/TLS termination و کشینگ (caching) را انجام دهد.
NGINX همچنین به عنوان یک سرور پروکسی عمل نموده و درخواستهای کلاینت را به سرور back-end مناسب هدایت میکند و در عین حال پاسخها را مدیریت مینماید که شامل تغییر هدر HTTP درخواستها و پاسخها برای افزایش امنیت یا عملکرد است.
کاربران همچنین می توانند ماژول های اضافی را به معماری NGINX اضافه کنند تا قابلیتهای آن را گسترش دهند. ماژولار بودن و مدیریت کارآمد نمونهها(instances)، NGINX را به ابزاری قدرتمند برای برنامههای مختلف وب، از وبسایتهای ساده گرفته تا معماریهای میکروسرویس پیچیده تبدیل میکند.
موارد استفاده انجیناکس چیست؟
بیایید بررسی کنیم که چگونه NGINX میتواند در محیطها و سناریوهای مختلف وب اعمال شود.
ارائه کارآمد محتوای استاتیک
مدیریت بهینه فایلهای استاتیک به ارائه یک تجربه کاربری رضایتبخش کمک میکند. یکی از نقاط قوت اصلی NGINX، تحویل کارآمد محتوای استاتیک است که شامل HTML، CSS، فایلهای جاوا اسکریپت و تصاویر هستند.
NGINX سرور از طریق مسیریابی درخواست موثر به این کارایی دست مییابد. هنگامی که کاربر یک صفحه وب را درخواست میکند، NGINX به سرعت محتوای استاتیک لازم را پیدا کرده و ارائه مینماید. همچنین میتواند چندین درخواست را به طور همزمان انجام دهد و حداکثر عملکرد را حتی در شرایط لود سنگین تضمین کند.
علاوه بر این، ویژگیهایی مانند ایندکسینگ خودکار (auto indexing) به طور قابل توجهی به این کارایی کمک میکند. ایندکسینگ خودکار در NGINX امکان بازیابی و نمایش سریعتر محتوای استاتیک را فراهم میکند و زمان پاسخ (response time) را تسریع مینماید. این قابلیت به ویژه برای وب سایتهایی با فایلهای استاتیک بزرگ مفید است.
لود بالانسینگ ترافیک وب در چندین سرور
NGINX به عنوان یک لود بالانسر کارآمد شناخته شده است و در توزیع ترافیک وب ورودی در چندین سرور(multiple servers) مهارت دارد. با توزیع یکنواخت درخواستها، لود بالانسینگ NGINX تضمین میکند که هیچ سروری به گلوگاه (bottleneck) تبدیل نمیشود، بهویژه در زمانهای اوج مصرف یا شرایط با تقاضای بالا.
مزایای استفاده از انجیناکس به عنوان لود بالانسر قابل توجه است.
در مرحله اول، در دسترس بودن وبسایت (website availability) را بهبود می بخشد. با به اشتراک گذاشتن بار بین چندین سرور، NGINX خطر داونتایم ناشی از بارگذاری بیش از حد(overloading) یک سرور را به حداقل میرساند. اگر یکی از سرورها با مشکلاتی مواجه شود، بقیه میتوانند به کار خود ادامه دهند و در نتیجه زمان کار وب سایت را حفظ کنند.
دوم، قابلیتهای لود بالانسینگ انجیناکس ، لود هر سرور را کاهش میدهد. این کار باعث افزایش عملکرد وب سرورها و افزایش طول عمر آنها با جلوگیری از استفاده بیش از حد میشود. بنابراین، NGINX به حفظ یک محیط سرور متعادل و سالم کمک میکند، که برای اجرای برنامههای وب در مقیاس بزرگ بسیار مهم است.
عمل به عنوان یک پروکسی معکوس برای میکروسرویسها
یک سرویس پروکسی معکوس در معماریهای وب مدرن بسیار مهم است، به ویژه زمانی که از NGINX برای میکروسرویسها استفاده میشود. پروکسی معکوس انجیناکس به عنوان واسطهای عمل میکند که درخواستهای کلاینت را قبل از رسیدن به سرورهای back-end رسیدگی مینماید.
پیادهسازی NGINX بهعنوان یک پروکسی معکوس، سرورهای بکاند را از قرار گرفتن مستقیم در معرض اینترنت محافظت میکند. میتواند ترافیک ورودی را رهگیری و بازرسی کند، سطح حمله و آسیب پذیریهای احتمالی را کاهش دهد. بنابراین، تنها ترافیک لازم به هر سرویس میرسد.
این ترتیب امنیتی انجیناکس بیشتر برای معماریهای میکروسرویس که در آن چندین سرویس به طور همزمان کار میکنند سودمند است.
مقایسه NGINX با Apache
NGINX اغلب با Apache، یکی دیگر از نرم افزارهای وب سرور پرکاربرد مقایسه میشود. درک تفاوتهای اساسی آنها برای انتخاب آگاهانه برای نیازهای کاربر ضروری است.
آپاچی که به دلیل انعطاف پذیری و قدرت خود معروف است، سالها است که یک نرم افزار وب سرور محبوب بوده و بر اساس یک مدل مبتنی بر فرآیند (process-based) عمل میکند که یک فرآیند جدید برای هر درخواست ایجاد مینماید. این روش سنتی میتواند به ویژه در لودهای سنگین، منابع را تحت فشار قرار دهد.
در مقابل، NGINX از روشی با منابع کارآمدتر برای حفظ عملکرد بالا استفاده میکند. از یک مدل رویداد محور(event-driven) برای رسیدگی به درخواستهای متعدد در یک رشته (thread) استفاده مینماید. این امر مصرف منابع را به حداقل رسانده و انجیناکس را در شرایط پرترافیک کارآمد میکند.
هنگام تصمیم گیری برای انتخاب بین NGINX و Apache، بسیار مهم است که الزامات خاص اپلیکیشنهای وب خود را در نظر بگیرید.
آپاچی برای پیکربندیهای پیچیده و پردازش محتوای داینامیک مناسب است که آن را به گزینهای قوی برای برنامههای مختلف تبدیل میکند در حالی که NGINX در ارائه محتوای استاتیک، لود بالانسینگ و رسیدگی به درخواستهای همزمان زیاد برتری دارد. این باعث میشود انجیناکس برای وبسایتها و برنامههای پربازدید با اولویت کارایی و اثربخشی ایدهآل باشد.
شروع کار با NGINX
برای استفاده موثر از انجیناکس ، ابتدا باید نحوه راه اندازی و پیکربندی آن را بیاموزید. اگرچه NGINX با سیستم عاملهای مختلف سازگار است، اما به دلیل عملکرد و ویژگیهای امنیتی آن در لینوکس رایج است.
پس از خرید سرور مجازی از پارسدو، وب سرور NGINX را نصب کنید. فرآیند نصب ممکن است بر اساس توزیع لینوکس شما کمی متفاوت باشد، اما به طور کلی شامل دانلود بسته NGINX و اجرای چند دستور ساده لینوکس است.
هنگامی که نصب NGINX انجام شد، مرحله بعدی پیکربندی NGINX برای مطابقت با نیازهای شما است که ممکن است شامل راه اندازی انجیناکس برای میزبانی وب، پیکربندی آن برای مدیریت برنامههای PHP یا پیاده سازی NGINX SSL/TLS برای اتصالات HTTPS ایمن باشد.
در ادامه مطلب ، نحوه نصب NGINX در اوبونتو را در مراحل سادهای که میتوانید به راحتی در سرور اوبونتو 22.04 خود دنبال کنید، مورد بحث قرار خواهیم داد.
vps لینوکس یک ماشین مجازی کامل است که امکان دسترسی SSH طبق آموزش را به آن خواهید داشت.
خرید vps لینوکس در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
نصب NGINX در اوبونتو 22.04
اکنون که میدانید انجیناکس یک انتخاب عالی برای پروژههای شما است، کافیست یک سرور مجازی لینوکس از پارسدو تهیه نمائید تا به سادگی طبق راهنمای گام به گام زیر روی آن وبسرور Nginx را نصب و پیکربندی کنید:
-
مرحله شماره 1: بسته NGINX را نصب کنید
خبر خوب این است که انجیناکس در مدیریت بسته پیشفرض اوبونتو گنجانده شده است. بنابراین برای دریافت آخرین بسته NGINX از مخازن پیش فرض اوبونتو، فقط باید فهرست بسته APT را به روز کنید.فرآیند را با بهروزرسانی مدیریت بسته APT با دستور زیر شروع کنید:
وقتی دستور به پایان رسید، آخرین بسته NGINX را روی سرور داریم. سپس سرور انجیناکس را با دستور زیر نصب میکنیم:
-
مرحله 2: وضعیت فایروال را بررسی کنید
اکنون که NGINX را روی سرور اوبونتو نصب کردهاید، مرحله بعدی پیکربندی فایروال سرور برای اجازه دادن به ترافیک به فرآیند انجیناکس است. از آنجایی که NGINX یک بسته سرور محبوب است، installation معمولا سرویس NGINX را با فایروال سیستم ثبت میکند. با این حال، شما همیشه باید بررسی کنید که سرویس NGINX واقعا در فایروال ثبت شده است و اجازه ترافیک ورودی به سرویس NGINX را میدهد یا خیر. برای این کار از دستور زیر استفاده کنید:
بعد با دستور زیر وضعیت سرویس را دریافت کنید که وضعیت سرویس NGINX را نمایش میدهد.
-
مرحله 3: وب سرور را بررسی کنید
رفتار پیشفرض اوبونتو برای راهاندازی سرویسهایی مانند NGINX در حین نصب و راهاندازی سرور، در بین نسخهها نسبتا سازگار است. با این حال، در اکثر نصبهای اوبونتو، وب سرور NGINX به طور خودکار در پایان فرآیند نصب start نمیشود. بنابراین، شما باید سرویس NGINX را به صورت دستی با دستور زیر راه اندازی کنید:
برای بررسی وضعیت سرویسی که توسط سیستم systemd init مدیریت می شود (از جمله انجیناکس )، از دستور زیر استفاده کنید:
هنگامی که NGINX روی سرور اوبونتو نصب و اجرا شد، میتوانید به صفحه فرود پیشفرض NGINX دسترسی پیدا کنید تا تایید کنید که درست کار میکند. برای این کار، با وارد کردن URL زیر در نوار آدرس، به صفحه فرود در مرورگر خود دسترسی پیدا کنید:
اگر چیزی شبیه به موارد زیر مشاهده کردید، انجیناکس به درستی روی سرور اوبونتو شما نصب شده است.
مدیریت فرآیند انجیناکس
اکنون که NGINX را روی سرور اوبونتو خود نصب کردهاید، میتوانید فرآیند انجیناکس را برای انجام فعالیتهای مختلف مدیریت کنید. متوجه خواهید شد که بسیاری از این دستورات از systemctl استفاده میکنند که با سیستم systemd init تعامل دارد.
وضعیت سرویس NGINX را بررسی کنید
با دستور زیر وضعیت سرویس NGINX را بررسی کنید:
فرآیند NGINX را شروع کنید
برای شروع فرآیند NGINX از دستور زیر استفاده کنید:
فرآیند NGINX را راهاندازی مجدد کنید
برای راه اندازی مجدد فرآیند NGINX از دستور زیر استفاده کنید:
فرآیند NGINX را بارگیری مجدد کنید
از دستور زیر برای راه اندازی مجدد فرآیند NGINX استفاده کنید. توجه داشته باشید که در حین راه اندازی مجدد، دستور همه تنظیمات را بدون حذف کانکشنها بارگذاری مجدد میکند.
سرویس NGINX را در بوت سرور فعال کنید
از دستور زیر برای شروع فرآیند انجیناکس هنگام راه اندازی یا راه اندازی مجدد سرور استفاده کنید:
سرویس انجیناکس را متوقف کنید
برای توقف سرویس انجیناکس از دستور زیر استفاده کنید:
سرویس انجیناکس را در بوت سرور غیرفعال کنید
برای غیرفعال کردن سرویس انجیناکس در بوت سرور از دستور زیر استفاده کنید:
توجه داشته باشید که هر زمان که فایلهای پیکربندی سرور انجیناکس را تغییر میدهید، همیشه باید به جای ریستارت سرویس NGINX، ریلود کنید. این تنظیمات با حفظ کانکشنهای موجود بدون ایجاد اختلال در تجربه کاربری، پیکربندی سرور را ریفرش میکند.
راه اندازی بلوکهای سرور (Server Blocks)
راهاندازی بلوکهای سرور (Server Blocks) که در وبسرورهای دیگر بهعنوان virtual hosts و vHost هم شناخته میشود در NGINX به شما این امکان را میدهد که چندین وبسایت یا برنامه را روی یک سرور میزبانی کنید. هر وبسایت میتواند دامنه یا آدرس IP مخصوص به خود را داشته باشد.
در ادامه یک راهنمای گام به گام برای راه اندازی بلوکهای سرور در انجیناکس در اوبونتو آمده است:
-
دایرکتوریهای مورد نیاز را ایجاد کنید
برای هر وب سایتی که میخواهید میزبانی کنید یک دایرکتوری ایجاد کنید.
به عنوان مثال، دستورات زیر دایرکتوریهای جداگانهای برای دو وب سایت، example.com و parsdev.com ایجاد میکنند:
-
مجوزهای (پرمیشن) مناسب را اختصاص دهید
باید اطمینان حاصل کنید که NGINX user (اغلب www-data) مجوزهای لازم برای دسترسی به دایرکتوریهای وبسایت را دارد. برای این کار از دستورات زیر استفاده کنید:
-
فایلهای پیکربندی را ایجاد کنید
در مرحله بعد، به دایرکتوری sites-available در انجیناکس بروید:
در این دایرکتوری، برای هر سایتی که می خواهید میزبانی کنید، یک فایل پیکربندی جدید ایجاد نمائید. توصیه میکنیم از نام دامنه سایت به عنوان نام فایل استفاده کنید.
مثلا:
بلاک سرور را پیکربندی کنید
در اینجا یک فایل اصلی پیکربندی بلوک سرور برای سایت example.com آمده است.
می توانید از این به عنوان یک تمپلیت استفاده کنید و آن را مطابق با نیاز خود تنظیم نمائید، و فراموش نکنید که example.com را با نام دامنه خود جایگزین کنید:
وقتی کارتان تمام شد، به یاد داشته باشید که فایل را ذخیره کرده و ببندید.
-
یک Symbolic Link ایجاد کنید
برای فعال کردن بلوک سرور، از دستور زیر برای ایجاد یک Symbolic Link به دایرکتوری sites-available استفاده کنید:
- تنظیمات پیش فرض را غیرفعال کنید
به طور پیش فرض، NGINX با یک فایل پیکربندی پیش فرض ارائه می شود. اگر به آن نیاز ندارید، ما توصیه میکنیم آن را غیرفعال کنید تا از هرگونه تداخل بین فایلهای پیکربندی جلوگیری شود:
- پیکربندی را آزمایش و سرویس انجیناکس را دوباره راه اندازی کنید
قبل از استفاده از فایل پیکربندی جدید، بسیار مهم است که فایل پیکربندی انجیناکس را برای خطاهای سینتکس آزمایش کنید:
اگر تست موفقیت آمیز بود، انجیناکس را راه اندازی کنید تا تغییرات اعمال شود:
- برای سایت های دیگر تکرار کنید
مراحل 3 تا 7 را برای هر وب سایت دیگری که می خواهید روی همان سرور میزبانی کنید، تکرار کنید.
به یاد داشته باشید که تنظیمات DNS را برای هر دامنه به آپدیت کنید تا به آدرس IP سرور شما اشاره کند. هنگامی که بلوکهای سرور راهاندازی شدند و DNS به درستی پیکربندی شد، NGINX درخواستهای دریافتی را بر اساس نام دامنه در هدر HTTP Host به بلوک سرور مناسب هدایت میکند.
فایلها و دایرکتوریهای مهم NGINX
دانستن فایلها و دایرکتوریهای حیاتی که حاوی فایلهای پیکربندی و دادههای مرتبط هستند، جنبه مهم کار با NGINX است.
در ادامه فایلها و دایرکتوریهای کلیدی انجیناکس وجود دارد که باید از آنها آگاه باشید:
فایل پیکربندی اصلی NGINX
این فایل پیکربندی اصلی انجیناکس است که شامل دستورالعملهای مربوط به تنظیمات گلوبال، فرآیندهای worker، ثبت خطا و سایر تنظیمات ضروری است.
دایرکتوری پیکربندی سایتهای NGINX
مسیر دایرکتوری:
این دایرکتوری حاوی فایلهای پیکربندی جداگانه برای هر بلوک سرور (ویرچوال هاست) تعریف شده روی سرور است. این فایلها تنظیمات مربوط به وبسایتها یا برنامههای مختلف میزبانی شده روی سرور را مشخص میکنند.
دایرکتوری سایتهای فعال شده انجیناکس
مسیر دایرکتوری:
این دایرکتوری حاوی symbolic links به فایلهای پیکربندی در دایرکتوری sites-available است. NGINX فایل های پیکربندی را در این دایرکتوری ذخیره می کند و برای روشن یا خاموش کردن بلوک های سرور خاص استفاده می شود.
دایرکتوری NGINX HTML Root
این دایرکتوری root پیشفرض است که فایلهای وب برای بلوک سرور پیشفرض در آن ذخیره میشوند. وقتی مستقیم به آدرس IP سرور دسترسی پیدا میکنید، NGINX فایلها را از این مکان ارائه میکند.
دایرکتوری ماژولهای انجیناکس
مسیر دایرکتوری:
ماژول های انجیناکس از این دایرکتوری نصب و مدیریت می شوند. هر ماژول معمولا فایل پیکربندی خود را در این دایرکتوری دارد.
دایرکتوری Nginx Logs
مسیر دایرکتوری:
انجیناکس فایلهای log را در این دایرکتوری ذخیره میکند که شامل گزارشهای دسترسی و خطا است که برای عیب یابی و مانیتور بر وب سرور ضروری است.
دایرکتوری FastCGI Cache
مسیر دایرکتوری:
اگر ویژگی کش FastCGI فعال باشد، انجیناکس داده های کش شده را در این دایرکتوری ذخیره میکند. FastCGI Cache می تواند به طور قابل توجهی عملکرد وب سایت های داینامیک را بهبود بخشد.
فایل NGINX PID
مسیر فایل:
این فایل حاوی شناسه فرآیند اولیه (PID) فرآیند NGINX است. ابزارها و فرآیندهای سیستم از این اطلاعات برای مدیریت و کنترل فرآیند انجیناکس استفاده می کنند.
نتیجه
NGINX یک وب سرور متنباز است که به دلیل تطبیق پذیری و عملکرد خود محبوبیت گستردهای به دست آورده است. در طول این مطلب، ما بررسی کردهایم که انجیناکس چیست و چگونه کار میکند.
ما همچنین مزایای متعدد انجیناکس برای زیرساخت وب را توضیح دادهایم. انجیناکس ترکیبی از سرعت، امنیت و مقیاس پذیری را از ارائه کارآمد محتوای استاتیک گرفته تا عمل به عنوان یک لود بالانسر قوی و یک پروکسی معکوس ایمن برای میکروسرویسها ارائه میدهد که باعث میشود که هم برای توسعه دهندگان و هم برای مدیران سیستم ابزاری ارزشمند باشد.
NGINX به عنوان یک راهکار قابل اعتماد و قوی مناسب برای برنامههای مختلف، از وبلاگهای شخصی کوچک گرفته تا سیستمهای پیچیده در سطح سازمانی، متمایز است. این نرم افزار وب سرور نحوه مدیریت برنامهها و خدمات وب را تغییر داده و حداکثر کارایی و انعطاف پذیری را ارائه میدهد.