وب سرورانجنیکس

آموزش کاربردی وب سرور Nginx

قسمت اول

مقدمه

در پست های قبل در مورد وب سرور های مختلف از جمله Nginx ، نحوه نصب و تعریف Server Block در آن بحث شد. پس از آشنایی و نصب این وب سرور زمان آن فرا رسید تا این وب سرور را بصورت عمیق تر شناخته، کانفیگ و مدیریت آن را یاد بگیرید. در این مقاله مفاهیم پایه بصورت کلی مطرح می‌شود تا با نحوه کارکرد این وب سرور آشنا شوید. در صورتی که nginx در سرور شما نصب نیست دست بکار شده و آن را روی سرور خود نصب نمایید. آموزش نصب Nginx در همین وب سایت موجود میباشد.

بیشتر بخوانید: آموزش نصب nginx در CentOS

 

 

در این مقاله با مفاهیم زیر اشنا خواهید شد:

  • آشنایی با نحوه Start, Stop و Reload کردن تنظیمات
  • آشنایی با ساختار فایل Configuration وب سرور Nginx
  • تنظیم وب سرور برای ارائه فایل ها و محتوای Static
  • استفاده از Nginx به عنوان Proxy Server
  • نحوه متصل کردن Nginx به برنامه های تحت FastCGI

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

در وب سرور Nginx یک Master Process و تعدادی Worker Process وجود دارد که مهمترین هدف Master Process خواندن، برسی تنظیمات و حفاظت از Worker Process ها می‌باشد. Worker Process ها پردازش درخواست هایی که به سمت وب سرور می آیند را انجام می‌دهند. Nginx با استفاده از مکانیزم رویداد گرایی مربوط به سیستم عامل بصورت کاملا موثر درخواست ها را بین Worker Process ها تقسیم می‌کند. تعداد Worker Process در فایل تنظیمات قابل تقییر می‌باشد. این تعداد می‌تواند ثابت و یا وابسته به تعداد هسته های در دسترس پردازشگر قابل تغییر باشد.

# service nginx restart
* Restarting nginx
# ps -ef --forest | grep nginx
root     32475     1  0 13:36 ?        00:00:00 nginx: master process /usr/sbin/nginx \
                                                -c /etc/nginx/nginx.conf
nginx    32476 32475  0 13:36 ?        00:00:00  \_ nginx: worker process
nginx    32477 32475  0 13:36 ?        00:00:00  \_ nginx: worker process
nginx    32479 32475  0 13:36 ?        00:00:00  \_ nginx: worker process
nginx    32480 32475  0 13:36 ?        00:00:00  \_ nginx: worker process
nginx    32481 32475  0 13:36 ?        00:00:00  \_ nginx: cache manager process
nginx    32482 32475  0 13:36 ?        00:00:00  \_ nginx: cache loader process

Nginx و ماژول های آن بر اساس فایل Configuration کار می‌کنند. بصورت پیشفرض فایل کانفیگ Nginx که nginx.conf نام دارد ممکن است در یکی از آدرس های
/usr/local/nginx/conf, /etc/nginx و /usr/local/etc/nginx قرار داشته باشد.

نحوه Stop,Start و Reload تنظیمات

برای شروع به کار nginx باید فایل اجرایی آن را اجرا کنید. زمانی که وب سرور اجرا شد می‌تواند توسط فراخوانی دستور و پارامتر های مشخص کنترل شود. فرم کلی دستور بصورت زیر خواهد بود:

nginx -s signal

سیگنال ارسال شده جهت کنترل وب سرور بطور کلی بصورت زیر می‌باشد:

  • stop – وب سرور به سرعت متوقف می‌شود.
  • quit – برای مواقعی که درخواست های فعال پاسخ داده شده و سپس وب سرور متوقف می‌شود.
  • reload – تنظیمات وب سرور مجددا بارگزاری می‌شود.
  • reopen – فایل های لاگ وب سرور مجددا باز می‌شود.

برای مثال برای اینکه قبل از متوقف شدن وب سرور تمامی درخواست های ارسال شده به سمت Worker Process پاسخ داده شود می‌توانید از دستور زیر استفاده نمایید:

nginx -s quit

توجه داشته باشید دستوراتی که برای کنترل این وب سرور استفاده می‌شود باید توسط همان نام کاربری که پروسس وب سرور را اجرا کرده است اجرا شود. تغییراتی که در فایل configuration انجام می‌شود تا زمان Reload اعمال نخواهد شد. برای این مورد می‌توانید وب سرور را ریستارت و یا reload نمایید. برای reload وب سرور دستور زیر را در محیط Command Line وارد نمایید.

nginx -s reload

زمانی که پردازشگر اصلی وب سرور سیگنال Reload تنظیمات را دریافت می‌کند ابتدا درستی Syntax فایل configuration جدید را مورد بررسی قرار داده در صورت عدم وجود مشکل در دستورات و بلاک دستورات، Master Process با ایجاد Worker Process جدید، سیگنال خاتمه کار یا اصطلاحا Shutdown را به Worker Process های قدیمی ارسال می‌کند. Worker Process های قدیمی درخواست های جدید که به سمت آن ارسال می‌شود را قبول نکرده و پس از پردازش درخواست های جاری از محدوده کاری خارج می‌شود. در صورتی که تنظیمات ایجاد شده اشتباه باشد سیگنال Reload اعمال نشده و وب سرور با تنظیمات قبلی به کار خود ادامه می دهد.

برای توقف پروسه Nginx می‌توانید از دستور کمکی Kill مربوط به سیستم عامل نیز استفاده نمایید که بصورت مستقیم سیگنال را به Process ارسال می‌کند. ابتدا باید PID پروسه را پیدا کنید. برای این منظور می‌توانید از دستور زیر جهت مشاهده همه پردازش های Nginx استفاده نمایید:

ps -ax | grep nginx

ساختار فایل Configuration

Nginx شامل ماژول هایی می‌باشد که این ماژول ها توسط Directive های درون فایل تنظیمات کنترل می‌شود. جهت استفاده از این ماژول ها Directive ایجاد شده که شامل نام و پارامتر می‌باشد که با سمی کالن (;) پایان می یابد. بلاک های Directive نیز با کمی تغییر درون علامت { } ایجاد می‌شود. Directive هایی که بتواند در درون خود Directive های دیگری داشته باشد Context نامیده می‌شود. برای نمونه در مثال زیر Directive های Server در Directive مربوط به http ایحاد می‌شود:

http {
  index index.html;
 
  server {
    server_name www.domain1.com;
    access_log logs/domain1.access.log main;
 
    root /var/www/domain1.com/htdocs;
  }
 
  server {
    server_name www.domain2.com;
    access_log  logs/domain2.access.log main;
 
    root /var/www/domain2.com/htdocs;
  }
}

نکته: در بلاک تنظیمات برای کامنت کردن یک خط از علامت # استفاده می‌شود.

ارائه فایل های Static

یکی از وظایف مهم وب سرور ارائه فایل های استاتیک به سرویس گیرنده است. این فایل ها می‌تواند شامل تصویر و یا فایل های استاتیک HTML باشد. فایل ها می‌تواند از آدرس های مختلف دایرکتوری در Local ارائه شود. برای مثال شما می‌توانید فایل های HTML را از آدرس data/www/ و فایل های تصویر را از آدرس data/image/ به درخواست کاربر ارائه نمایید. برای انجام این کار باید فایل تنظیمات را ویرایش کرده و در بلاک server که در داخل بلاک http می‌باشد دو بلاک location تعریف کنید.

ابتدا یک دایرکتوری با آدرس data/www/ ایجاد کرده و در درون آن یک فایل index.html بسازید، سپس دایرکتوری data/image/ ایجاد کرده و یک تصویر در آن قرار دهید. توجه داشته باشید آدرس های بالا مثال بوده و در سناریو واقعی آدرس ها باید درست باشد یعنی برای استفاده از دایرکتوری home باید دایرکتوری های مورد نظر بصورت تو در تو در این دایرکتوری ایجاد شود. پس از ایجاد دایرکتوری فایل تنظیمات را باز کنید. فایل تنظیمات بصورت پیشفرض شامل بلاک سرور می‌باشد که در اغلب موارد خطوط بلاک سرور کامنت شده می‌باشد. برای شروع می‌توانید خطوط کامنت شده را از حالت کامنت خارج نمایید:

http {
    server {
    }
}

در حالت کلی فایل تنظیمات میتواند شامل تعدادی بلاک Server باشد که با توجه به پورت مورد استفاده و نام بلاک این بلاک ها با هم متمایز میشود. زمانی که یک درخواست به سمت Nginx ارسال شد با توجه به Header و پارامتر های درخواست، با توجه به تنظیمات موجود در فایل تنظیمات به ان پاسخ داده میشود. بلاک location را در بلاک سرور اضافه کنید:

location / {
    root /data/www;
}

در بلاک location پیشوند / مشخص می‌شود که این پیشوند با URI که از درخواست وجود دارد مقایسه می‌شود. برای تطابق درخواست URI در مسیر مشخص شده در روت Directive که ادرس data/www/ است اضافه می‌شود تا آدرس فایل روی Local مشخص شود. اگر درخواست های ارسال شده با بلاک های location مختلف مطابقت داشته باشد nginx طولانی ترین پیشوند را انتخاب می کند. بلاک location بالا کوتاه ترین پیشوند را دارد، در صورتی که دیگر location ها با درخواست های ارسال شده مطابقت نداشته باشد این بلاک استفاده خواهد شد. میتوانید حالا بلاک دوم location را اضافه کنید:

location /images/ {
    root /data;
}

بلاک بالا درخواست هایی که با ادرس image/ شروع شود را پاسخ می دهد. البته توجه داشته باشید که درخواست / location نیز با این درخواست مطابقت دارد اما همانطور که عرض شد بلاک طولانی ترین پیشوند برای پاسخ به درخواست استفاده شده و در صورت عدم وجود و تطابق، کوتاه ترین پیشوند که / location باشد انتخاب می‌شود.

در آخر بلاک سرور ایجاد شده در فایل تنظیمات باید مانند متن زیر باشد:

server {
    location / {
        root /data/www;
    }
 
    location /images/ {
        root /data;
    }
}

اگر آدرس فایل در تنظیمات به درستی وارد شود وب سرور به پورت ۸۰ گوش می‌دهد و فایل های شما از طریق ادرس لوکال هاست http://localhost/ در دسترس خواهد بود. در پاسخ به درخواست های URIs هایی که با /image/ شروع می‌شود سرور فایل را از دایرکتوری با ادرس data/image/ ارسال می‌کند برای مثال در پاسخ به درخواست http://localhost/image/example.png وب سرور nginx فایل example که در دایرکتوری image قرار دارد را به درخواست ارسال می‌کند. زمانی که فایل درخواست شده موجود نباشد پاسخ یک ارور با کد ۴۰۴ است که به درخواست داده می‌شود. برای اعمال تغییرات وب سرور را ریستارت کنید. اگر وب سرور به درستی کار نکرد و ایرادی در کارایی ان مشاهده کردید میتوانید لاگ ارور nginx را برسی نمایید. لاگ nginx در آدرس های زیر قرار دارد.

/var/log/nginx
/usr/local/nginx/logs

 

سعید یاوری

فعال در حوزه شبکه و امنیت DevSecOps

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

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

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

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