NGINX چیست و چگونه کار می‌کند؟

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


NGINX  چیست؟

انجین‌اکس (NGINX) یک وب سرور متن‌باز است که به دلیل عملکرد بالا و استفاده کم از منابع شناخته شده است. در ارائه محتوای استاتیک عالی است و به طور گسترده به عنوان لود بالانسر و به عنوان یک پروکسی معکوس استفاده می‌شود . NGINX با سیستم عامل‌های مختلف سازگار است و از نقش سنتی یک وب سرور فراتر رفته است.

دو نسخه از NGINX وجود دارد:که عبارتند از NGINX Open Source و NGINX Plus

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


NGINX  چگونه کار می‌کند؟

NGINX سرور، بر اساس معماری رویداد محور(event-driven)، مقیاس پذیر و ناهمزمان(asynchronous) عمل می‌کند. NGINX در هسته خود از یک فرآیند اصلی و چندین فرآیند worker استفاده می‌نماید. فرآیند اصلی فایل‌های پیکربندی را خوانده و ارزیابی می‌نماید و فرآیندهای worker را مدیریت می‌کند. در همین حال، پردازش‌های worker پردازش واقعی(actual) درخواست‌ها را انجام می‌دهند.

NGINX چگونه کار می‌کند

برخلاف سرورهایی که برای هر درخواست فرآیند جدیدی ایجاد می‌کنند، فرآیندهای وُرکر NGINX می‌توانند هزاران درخواست همزمان را بپذیرند. این امر سربار(overhead) را کاهش داده و ظرفیت NGINX را برای مدیریت ترافیک سنگین شبکه افزایش می‌دهد.

NGINX همچنین می‌تواند ترافیک ورودی و خروجی را به عنوان یک سرور پروکسی معکوس و API gateway مدیریت کند و به عنوان یک واسطه برای درخواست‌های کلاینت که به دنبال منابع از سرورهای دیگر هستند عمل نماید. در این نقش، NGINX  می‌تواند عملکردهایی مانند لود بالانسینگ،  SSL/TLS termination  و کشینگ (caching) را انجام دهد.

NGINX  همچنین به عنوان یک سرور پروکسی عمل نموده و درخواست‌های کلاینت را به سرور back-end مناسب هدایت می‌کند و در عین حال پاسخ‌ها را مدیریت می‌نماید که شامل تغییر هدر HTTP درخواست‌ها و پاسخ‌ها برای افزایش امنیت یا عملکرد است.

کاربران همچنین می توانند ماژول های اضافی را به معماری NGINX اضافه کنند تا قابلیت‌های آن را گسترش دهند. ماژولار بودن و مدیریت کارآمد نمونه‌ها(instances)، NGINX  را به ابزاری قدرتمند برای برنامه‌های مختلف وب، از وب‌سایت‌های ساده گرفته تا معماری‌های میکروسرویس پیچیده تبدیل می‌کند.


موارد استفاده NGINX چیست؟

بیایید بررسی کنیم که چگونه NGINX می‌تواند در محیط‌ها و سناریوهای مختلف وب اعمال شود.

ارائه کارآمد محتوای استاتیک

مدیریت بهینه فایل‌های استاتیک به ارائه یک تجربه کاربری رضایت‌بخش کمک می‌کند. یکی از نقاط قوت اصلی NGINX، تحویل کارآمد محتوای استاتیک است که شامل HTML، CSS، فایل‌های جاوا اسکریپت و تصاویر هستند.
NGINX سرور از طریق مسیریابی درخواست موثر به این کارایی دست می‌یابد. هنگامی که کاربر یک صفحه وب را درخواست می‌کند، NGINX به سرعت محتوای استاتیک لازم را پیدا کرده و ارائه می‌نماید. همچنین می‌تواند چندین درخواست را به طور همزمان انجام دهد و حداکثر عملکرد را حتی در شرایط لود سنگین تضمین کند.

علاوه بر این، ویژگی‌هایی مانند ایندکسینگ خودکار (auto indexing) به طور قابل توجهی به این کارایی کمک می‌کند. ایندکسینگ خودکار در NGINX امکان بازیابی و نمایش سریعتر محتوای استاتیک را فراهم می‌کند و زمان پاسخ (response time) را تسریع می‌نماید. این قابلیت به ویژه برای وب سایت‌هایی با فایل‌های استاتیک بزرگ مفید است.

لود بالانسینگ ترافیک وب در چندین سرور

NGINX به عنوان یک لود بالانسر کارآمد شناخته شده است و در توزیع ترافیک وب ورودی در چندین سرور(multiple servers) مهارت دارد. با توزیع یکنواخت درخواست‌ها، لود بالانسینگ NGINX تضمین می‌کند که هیچ سروری به گلوگاه (bottleneck) تبدیل نمی‌شود، به‌ویژه در زمان‌های اوج مصرف یا شرایط با تقاضای بالا.

مزایای استفاده از NGINX به عنوان لود بالانسر قابل توجه است.

در مرحله اول، در دسترس بودن وب‌سایت (website availability) را بهبود می بخشد. با به اشتراک گذاشتن بار بین چندین سرور، NGINX خطر داون‌تایم ناشی از بارگذاری بیش از حد(overloading) یک سرور را به حداقل می‌رساند. اگر یکی از سرورها با مشکلاتی مواجه شود، بقیه می‌توانند به کار خود ادامه دهند و در نتیجه زمان کار وب سایت را حفظ کنند.

دوم، قابلیت‌های لود بالانسینگ NGINX، لود هر سرور را کاهش می‌دهد. این کار باعث افزایش عملکرد وب سرورها و افزایش طول عمر آنها با جلوگیری از استفاده بیش از حد می‌شود. بنابراین، NGINX به حفظ یک محیط سرور متعادل و سالم کمک می‌کند، که برای اجرای برنامه‌های وب در مقیاس بزرگ بسیار مهم است.

عمل به عنوان یک پروکسی معکوس برای میکروسرویس‌ها

یک سرویس پروکسی معکوس در معماری‌های وب مدرن بسیار مهم است، به ویژه زمانی که از NGINX برای میکروسرویس‌ها استفاده می‌شود. پروکسی معکوس NGINX به عنوان واسطه‌ای عمل می‌کند که درخواست‌های کلاینت را قبل از رسیدن به سرورهای back-end رسیدگی می‌نماید.

پیاده‌سازی NGINX به‌عنوان یک پروکسی معکوس، سرورهای بک‌اند را از قرار گرفتن مستقیم در معرض اینترنت محافظت می‌کند. می‌تواند ترافیک ورودی را رهگیری و بازرسی کند، سطح حمله و آسیب پذیری‌های احتمالی را کاهش دهد. بنابراین، تنها ترافیک لازم به هر سرویس می‌رسد.

این ترتیب امنیتی NGINX بیشتر برای معماری‌های میکروسرویس که در آن چندین سرویس به طور همزمان کار می‌کنند سودمند است.


مقایسه NGINX با Apache

NGINX اغلب با Apache، یکی دیگر از نرم افزارهای وب سرور پرکاربرد مقایسه می‌شود. درک تفاوت‌های اساسی آنها برای انتخاب آگاهانه برای نیازهای کاربر ضروری است.

آپاچی که به دلیل انعطاف پذیری و قدرت خود معروف است، سال‌ها است که یک نرم افزار وب سرور محبوب بوده و بر اساس یک مدل مبتنی بر فرآیند (process-based) عمل می‌کند که یک فرآیند جدید برای هر درخواست ایجاد می‌نماید. این روش سنتی می‌تواند به ویژه در لودهای سنگین، منابع را تحت فشار قرار دهد.

در مقابل، NGINX از روشی با منابع کارآمدتر برای حفظ عملکرد بالا استفاده می‌کند. از یک مدل رویداد محور(event-driven) برای رسیدگی به درخواست‌های متعدد در یک رشته (thread) استفاده می‌نماید. این امر مصرف منابع را به حداقل رسانده و NGINX را در شرایط پرترافیک کارآمد می‌کند.

هنگام تصمیم گیری برای انتخاب بین NGINX و Apache، بسیار مهم است که الزامات خاص اپلیکیشن‌های وب خود را در نظر بگیرید.

آپاچی برای پیکربندی‌های پیچیده و پردازش محتوای داینامیک مناسب است که آن را به گزینه‌ای قوی برای برنامه‌های مختلف تبدیل می‌کند در حالی که  NGINX در ارائه محتوای استاتیک، لود بالانسینگ و رسیدگی به درخواست‌های همزمان زیاد برتری دارد. این باعث می‌شود NGINX برای وب‌سایت‌ها و برنامه‌های پربازدید با اولویت کارایی و اثربخشی ایده‌آل باشد.
 


شروع کار با NGINX

برای استفاده موثر از NGINX، ابتدا باید نحوه راه اندازی و پیکربندی آن را بیاموزید. اگرچه NGINX با سیستم عامل‌های مختلف سازگار است، اما به دلیل عملکرد و ویژگی‌های امنیتی آن در لینوکس رایج است.
پس از خرید سرور مجازی از پارسدو، وب سرور NGINX را نصب کنید. فرآیند نصب ممکن است بر اساس توزیع لینوکس شما کمی متفاوت باشد، اما به طور کلی شامل دانلود بسته NGINX و اجرای چند دستور ساده لینوکس است.

هنگامی که نصب NGINX انجام شد، مرحله بعدی پیکربندی NGINX برای مطابقت با نیازهای شما است که ممکن است شامل راه اندازی NGINX برای میزبانی وب، پیکربندی آن برای مدیریت برنامه‌های PHP یا پیاده سازی NGINX SSL/TLS برای اتصالات HTTPS ایمن باشد.

در ادامه مطلب ، نحوه نصب NGINX در اوبونتو را در مراحل ساده‌ای که می‌توانید به راحتی در سرور اوبونتو 22.04 خود دنبال کنید، مورد بحث قرار خواهیم داد.


نصب NGINX در اوبونتو 22.04 

اکنون که می‌دانید NGINX یک انتخاب عالی برای پروژه‌های شما است، کافیست یک سرور مجازی لینوکس از پارسدو تهیه نمائید تا به سادگی طبق راهنمای گام به گام زیر روی آن وب‌سرور Nginx را نصب و پیکربندی کنید:

vps یک ماشین مجازی کامل است که امکان دسترسی SSH طبق آموزش را به آن خواهید داشت.
خرید vps در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
  • مرحله شماره 1: بسته NGINX را نصب کنید

خبر خوب این است که NGINX در مدیریت بسته پیش‌فرض اوبونتو گنجانده شده است. بنابراین برای دریافت آخرین بسته NGINX از مخازن پیش فرض اوبونتو، فقط باید فهرست بسته APT را به روز کنید.فرآیند را با به‌روزرسانی مدیریت بسته APT با دستور زیر شروع کنید:


sudo apt update

وقتی دستور به پایان رسید، آخرین بسته NGINX را روی سرور داریم. سپس سرور NGINX را با دستور زیر نصب می‌کنیم:

sudo apt install nginx

  • مرحله 2: وضعیت فایروال را بررسی کنید

اکنون که NGINX را روی سرور اوبونتو نصب کرده‌اید، مرحله بعدی پیکربندی فایروال سرور برای اجازه دادن به ترافیک به فرآیند NGINX است. از آنجایی که NGINX یک بسته سرور محبوب است، installation معمولا سرویس NGINX را با فایروال سیستم ثبت می‌کند. با این حال، شما همیشه باید بررسی کنید که سرویس NGINX واقعا در فایروال ثبت شده است و اجازه ترافیک ورودی به سرویس NGINX را می‌دهد یا خیر. برای این کار از دستور زیر استفاده کنید:

sudo ufw app list

بعد  با دستور زیر وضعیت سرویس را دریافت کنید که وضعیت سرویس NGINX را  نمایش می‌دهد.

sudo ufw status

  • مرحله 3: وب سرور را بررسی کنید

رفتار پیش‌فرض اوبونتو برای راه‌اندازی سرویس‌هایی مانند NGINX در حین نصب و راه‌اندازی سرور، در بین نسخه‌ها نسبتا سازگار است. با این حال، در اکثر نصب‌های اوبونتو، وب سرور NGINX به طور خودکار در پایان فرآیند نصب start نمی‌شود. بنابراین، شما باید سرویس NGINX را به صورت دستی با دستور زیر راه اندازی کنید:

sudo systemctl start nginx

برای بررسی وضعیت سرویسی که توسط سیستم systemd init مدیریت می شود (از جمله NGINX)، از دستور زیر استفاده کنید:

systemctl status nginx

 

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

http://your_server_ip

اگر چیزی شبیه به موارد زیر مشاهده کردید، NGINX به درستی روی سرور اوبونتو شما نصب شده است.

لندینگ پیج نصب nginx

مدیریت فرآیند NGINX

اکنون که NGINX را روی سرور اوبونتو خود نصب کرده‌اید، می‌توانید فرآیند NGINX را برای انجام فعالیت‌های مختلف مدیریت کنید. متوجه خواهید شد که بسیاری از این دستورات از systemctl استفاده می‌کنند که با سیستم systemd init تعامل دارد.

وضعیت سرویس NGINX را بررسی کنید
با دستور زیر وضعیت سرویس NGINX را بررسی کنید:

sudo systemctl status nginx


فرآیند NGINX را شروع کنید
برای شروع فرآیند NGINX از دستور زیر استفاده کنید:


sudo systemctl start nginx

فرآیند NGINX را  راه‌اندازی مجدد کنید
برای راه اندازی مجدد فرآیند NGINX از دستور زیر استفاده کنید:

sudo systemctl restart nginx

فرآیند NGINX را بارگیری مجدد کنید
از دستور زیر برای راه اندازی مجدد فرآیند NGINX استفاده کنید. توجه داشته باشید که در حین راه اندازی مجدد، دستور همه تنظیمات را بدون حذف کانکشن‌ها بارگذاری مجدد می‌کند.

sudo systemctl reload nginx

سرویس NGINX را در بوت سرور فعال کنید

از دستور زیر برای شروع فرآیند NGINX هنگام راه اندازی یا راه اندازی مجدد سرور استفاده کنید:

sudo systemctl enable nginx

سرویس NGINX را متوقف کنید
برای توقف سرویس NGINX از دستور زیر استفاده کنید:

sudo systemctl stop nginx


سرویس NGINX را در بوت سرور غیرفعال کنید
برای غیرفعال کردن سرویس NGINX در بوت سرور از دستور زیر استفاده کنید:

sudo systemctl disable nginx

توجه داشته باشید که هر زمان که فایل‌های پیکربندی سرور NGINX را تغییر می‌دهید، همیشه باید به جای ریستارت سرویس NGINX، ریلود کنید. این تنظیمات با حفظ کانکشن‌های موجود بدون ایجاد اختلال در تجربه کاربری، پیکربندی سرور را ریفرش می‌کند.


راه اندازی بلوک‌های سرور (Server Blocks)

راه‌اندازی بلوک‌های سرور (Server Blocks) که در وب‌سرورهای دیگر به‌عنوان virtual hosts و vHost هم شناخته می‌شود در NGINX به شما این امکان را می‌دهد که چندین وب‌سایت یا برنامه را روی یک سرور میزبانی کنید. هر وب‌سایت می‌تواند دامنه یا آدرس IP مخصوص به خود را داشته باشد.

در ادامه یک راهنمای گام به گام برای راه اندازی بلوک‌های سرور در NGINX در اوبونتو آمده است:

  1. دایرکتوری‌های مورد نیاز را ایجاد کنید

برای هر وب سایتی که می‌خواهید میزبانی کنید یک دایرکتوری ایجاد کنید.

به عنوان مثال، دستورات زیر دایرکتوری‌های جداگانه‌ای برای دو وب سایت، example.com و parsdev.com ایجاد می‌کنند:

sudo mkdir -p /var/www/example.com
sudo mkdir -p /var/www/another-site.com

  1. مجوزهای (پرمیشن) مناسب را اختصاص دهید

باید اطمینان حاصل کنید که NGINX user (اغلب www-data) مجوزهای لازم برای دسترسی به دایرکتوری‌های وب‌سایت را دارد. برای این کار از دستورات زیر استفاده کنید:

sudo chown -R www-data:www-data /var/www/example.com
sudo chown -R www-data:www-data /var/www/parsdev.com

  1. فایل‌های پیکربندی را ایجاد کنید

در مرحله بعد، به دایرکتوری sites-available  در NGINX بروید:

cd /etc/nginx/sites-available

در این دایرکتوری، برای هر سایتی که می خواهید میزبانی کنید، یک فایل پیکربندی جدید ایجاد نمائید. توصیه می‌کنیم از نام دامنه سایت به عنوان نام فایل استفاده کنید.

مثلا:

sudo nano example.com

  1. بلاک سرور را پیکربندی کنید

در اینجا یک فایل اصلی پیکربندی بلوک سرور برای سایت example.com آمده است.

می توانید از این به عنوان یک تمپلیت استفاده کنید و آن را مطابق با نیاز خود تنظیم نمائید، و فراموش نکنید که example.com را با نام دامنه خود جایگزین کنید:

server {
listen 80;
listen [::]:80;

 

server_name example.com www.example.com;

 

 

root /var/www/example.com;
index index.html;

 

 

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

وقتی کارتان تمام شد، به یاد داشته باشید که فایل را ذخیره کرده و ببندید.

  1. یک Symbolic Link ایجاد کنید

برای فعال کردن بلوک سرور، از دستور زیر برای ایجاد یک Symbolic Link به دایرکتوری sites-available  استفاده کنید:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

  1. تنظیمات پیش فرض را غیرفعال کنید

به طور پیش فرض، NGINX با یک فایل پیکربندی پیش فرض ارائه می شود. اگر به آن نیاز ندارید، ما توصیه می‌کنیم آن را غیرفعال کنید تا از هرگونه تداخل بین فایل‌های پیکربندی جلوگیری شود:

sudo unlink /etc/nginx/sites-enabled/default

  1. پیکربندی را آزمایش و سرویس NGINX را دوباره راه اندازی کنید

قبل از استفاده از فایل پیکربندی جدید، بسیار مهم است که فایل پیکربندی NGINX را برای خطاهای سینتکس آزمایش کنید:

sudo nginx -t


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

sudo systemctl restart nginx

  1. برای سایت های دیگر تکرار کنید

مراحل 3 تا 7 را برای هر وب سایت دیگری که می خواهید روی همان سرور میزبانی کنید، تکرار کنید.

به یاد داشته باشید که تنظیمات DNS را برای هر دامنه به آپدیت کنید تا به آدرس IP سرور شما اشاره کند. هنگامی که بلوک‌های سرور راه‌اندازی شدند و DNS به درستی پیکربندی شد، NGINX درخواست‌های دریافتی را بر اساس نام دامنه در هدر HTTP Host به بلوک سرور مناسب هدایت می‌کند.

 

فایل‌ها و دایرکتوری‌های مهم NGINX


دانستن فایل‌ها و دایرکتوری‌های حیاتی که حاوی فایل‌های پیکربندی و داده‌های مرتبط هستند، جنبه مهم کار با NGINX است.

در ادامه فایل‌ها و دایرکتوری‌های کلیدی NGINX وجود دارد که باید از آنها آگاه باشید:


فایل پیکربندی اصلی NGINX

 

مسیر فایل: 
 
/etc/nginx/nginx.conf

 

این فایل پیکربندی اصلی NGINX است که شامل دستورالعمل‌های مربوط به تنظیمات گلوبال، فرآیندهای worker، ثبت خطا و سایر تنظیمات ضروری است.

دایرکتوری پیکربندی سایت‌های NGINX

مسیر دایرکتوری:


 /etc/nginx/sites-available

این دایرکتوری حاوی فایل‌های پیکربندی جداگانه برای هر بلوک سرور (ویرچوال هاست) تعریف شده روی سرور است. این فایل‌ها تنظیمات مربوط به وب‌سایت‌ها یا برنامه‌های مختلف میزبانی شده روی سرور را مشخص می‌کنند.

دایرکتوری سایت‌های فعال شده NGINX

مسیر دایرکتوری:


 /etc/nginx/sites-enabled

این دایرکتوری حاوی symbolic links به فایل‎های پیکربندی در دایرکتوری sites-available است. NGINX فایل های پیکربندی را در این دایرکتوری ذخیره می کند و برای روشن یا خاموش کردن بلوک های سرور خاص استفاده می شود.

دایرکتوری NGINX HTML Root

 

مسیر دایرکتوری: 
 
/var/www/html

 این دایرکتوری root پیش‌فرض است که فایل‌های وب برای بلوک سرور پیش‌فرض در آن ذخیره می‌شوند. وقتی مستقیم به آدرس IP سرور دسترسی پیدا می‌کنید، NGINX فایل‌ها را از این مکان ارائه می‌کند.

 

دایرکتوری ماژول‌های NGINX

مسیر دایرکتوری:


 /etc/nginx/modules-available

ماژول های NGINX از این دایرکتوری نصب و مدیریت می شوند. هر ماژول معمولا فایل پیکربندی خود را در این دایرکتوری دارد.

دایرکتوری Nginx Logs

مسیر دایرکتوری:


 /var/log/nginx

NGINX فایل‌های log را در این دایرکتوری ذخیره می‌کند که شامل گزارش‌های دسترسی و خطا است که برای عیب یابی و مانیتور بر وب سرور ضروری است.

دایرکتوری FastCGI Cache

مسیر دایرکتوری: 


/var/cache/nginx

اگر ویژگی کش FastCGI فعال باشد، NGINX داده های کش شده را در این دایرکتوری ذخیره می‌کند. FastCGI Cache می تواند به طور قابل توجهی عملکرد وب سایت های داینامیک را بهبود بخشد.

فایل NGINX PID

مسیر فایل:


 /run/nginx.pid

این فایل حاوی شناسه فرآیند اولیه (PID) فرآیند NGINX است. ابزارها و فرآیندهای سیستم از این اطلاعات برای مدیریت و کنترل فرآیند NGINX استفاده می کنند.

 

نتیجه

NGINX یک وب سرور متن‌باز است که به دلیل تطبیق پذیری و عملکرد خود محبوبیت گسترده‌ای به دست آورده است. در طول این مطلب، ما بررسی کرده‌ایم که NGINX چیست و چگونه کار می‌کند.

ما همچنین مزایای متعدد NGINX برای زیرساخت وب را توضیح داده‌ایم. NGINX ترکیبی از سرعت، امنیت و مقیاس پذیری را از ارائه کارآمد محتوای استاتیک گرفته تا عمل به عنوان یک لود بالانسر قوی و یک پروکسی معکوس ایمن برای میکروسرویس‌ها ارائه می‌دهد که باعث می‌شود که هم برای توسعه دهندگان و هم برای مدیران سیستم ابزاری ارزشمند باشد.

NGINX به عنوان یک راهکار قابل اعتماد و قوی مناسب برای برنامه‌های مختلف، از وبلاگ‌های شخصی کوچک گرفته تا سیستم‌های پیچیده در سطح سازمانی، متمایز است. این نرم افزار وب سرور نحوه مدیریت برنامه‌ها و خدمات وب را تغییر داده و حداکثر کارایی و انعطاف پذیری را ارائه می‌دهد.