آموزش تنظیمات اولیه وب سرور NGINX و ساختار آن

در این آموزش با نحوه نصب وب سرور NGINX آشنا شدیم. در این آموزش قصد داریم به فایل تنظیمات (configuration file) ورود پیدا کنیم و با اون آشنا بشیم.زمانی که افراد با وب سرور NGINX آشنایی پیدا می کنن و به سمت فراگیری تنظیمات اون میرن، با ساختار خاصی مواجه می شن که ممکنه در ابتدای کار اون ها رو دچار سردرگمی بکنه.البته این طبیعیه چون هر وب سروری ساختار خودش رو داره و از الگوی خاصی پیروی می کنه. اما نگران نباشید؛در ادامه قصد داریم تا جایی که ممکنه با ساختار کلی تنظیمات این وب سرور آشنا بشیم و اطلاعات خوبی راجع به اون به دست بیاریم.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

آشنایی با context در فایل تنظیمات nginx

در این آموزش ساختار ساده ای از تنظیماتی که در فایل تنظیمات اصلی nginx وجود داره رو بررسی می کنیم. همونطور که در آموزش نصب nginx به اون اشاره کردیم، این فایل معمولا در etc//nginx// به اسم nginx.conf وجود داره.چیزی که در ابتدا با مشاهده فایل کانفیگ اصلی با آن مواجه می شویم، ساختار درختی این فایل و وجود یک سری براکت به صورت { و } است.

در Nginx این محیط با نام context شناخته می شود. این context ها می توانند به صورت تودرتو تعریف شوند و یک حالت ارث بری در تنظیمات فراهم می شود به این صورت که تنظیماتی به صورت پیش فرض در context بیرونی وجود دارد و اگر در context داخلی مقداری با همان پارامتر ها تعریف شود بر روی آن اصطلاحا override می شود.جملاتی که درون context ها نوشته می شود directive نام دارد.

directive ها تنها در محل هایی که برای آن طراحی شده اند می توانند مورد استفاده قرار گیرند و اگر در خارج از این context ها تعریف شوند Nginx با error این موضوع را گوشزد خواهد کرد. این لینک که شامل مستندات وب سرور Nginx می باشد به شما می گوید که کدام directive ها در کدام context ها می توانند تعریف شوند.در ادامه با اصلی ترین context ها و directive ها آشنا می شویم:

context های اصلی

اولین دسته از context ها context های core یا اصلی می باشند که Nginx از آن ها برای ایجاد سلسله مراتب درختی تنظیمات و جدا کردن بلوک های تنظیمات استفاده می کند.

main context

این context بیرونی ترین context می باشد که در داخل هیچ context دیگری قرار ندارد و به صورت زیر آن را مشاهده می کنیم:
# The main context is here, outside any other contexts

. . .

context {

    . . .

}

هر directive ای که بیرون همه بلوک های تنظیمات قرار می گیرد، به عنوان main context رفتار می کند. این directive ها بر روی تمام Application ای که از این وب سرور، سرویس دریافت می کند اعمال می شوند.برخی از directive هایی که در main context تعریف می شوند از قبیل زیر می باشند:

  • user یا group هایی که worker process ها با آن ها run می شوند
  • تعداد worker process ها
  • فایلی که شناسه پروسه(PID) worker process اصلی در آن ذخیره شده است
  • فایلی که error های پیش فرض را برای تمام Application مشخص می کند(البته می تواند در context های مشخصی override شود)

Events context

همان طور که می توان حدس زد، events context داخل main context قرار دارد. تنظیمات سراسری مربوط به این که Nginx چگونه connection ها را به صورت کلی مدیریت کند وظیفه این context است. در کل فایل تنظیمات تنها یکبار می توان این context را تعریف کرد.تنظیمات این context به صورت زیر بوده و خارج از هر context تعریف می شود:

# main context

events {

    # events context
    . . .

}

جالب است بدانید که Nginx از یک مدل پردازشی event-base برای connection ها استفاده می کند. در نتیجه directive هایی که درون این context تعریف می شوند مشخص می کنند که worker process ها چگونه connection ها را مدیریت کنند.برای مثال worker_connections مقداری که رو به روی آن نوشته می شود را به عنوان حداکثر تعداد connection های همزمان که می تواند توسط یک worker process باز شود، در نظر می گیرد.

(توجه شود که این تعداد برای همه connection ها از قبیل proxy و client می باشد و فقط برای connection های client نیست). مقدار پیش فرض آن برابر 512 کانکشن می باشد.همیشه متد پردازش connection ها طبق بهترین انتخاب platform مورد نظر، به صورت خودکار انتخاب می گردد. برای سیستم عامل لینوکس متد epoll بهترین انتخاب است.


HTTP context

زمانی که Nginx به عنوان وب سرور و یا reverse proxy پیکربندی می شود، اصلی ترین تنظیمات در داخل این context قرار می گیرند. این context نحوه مدیریت context های دیگری که در درونش قرار می گیرد و یا نحوه handle کردن ارتباط های http یا https را برعهده دارد.این context پشت سر events context قرار می گیرد و داخل main context می باشد:

# main context

events {
    # events context

    . . .

}

http {
    # main context

    . . .

}
context های سطح پایین تر مانند http به صورت جزئی تری به نحوه handle کردن request ها می پردازد و virtual server ها در داخل آن تعریف می شوند. directive هایی که در این سطح تعریف می شوند، پیش فرض ها را برای هر virtual server که درون آن تعریف می شود کنترل می کند. تعداد بالایی از directive ها در این context می توانند تعریف شوند. برخی از آن ها را می توان به صورت زیر برشمرد:
  • کنترل کردن location پیش فرض برای لاگ های access و error - توسط (accesslog و errorlog)
  • پیکربندی عملیات I/O به صورت آسنکرون برای عملیات مربوط به فایل - توسط (aio , sendfile , و directio)
  • پیکربندی server status در هنگام رخداد error - توسط (error_page)
  • پیکربندی compression - توسط (gzip و gzip_disable)
  • مدیریت بهتر تنظیمات TCP keepalive - توسط (keepalivedisable , keepaliverequests و keepalive_timeout)
  • قوانینی که Nginx برای optimize کردن packet ها و system call ها از آن ها پیروی می کند - (sendfile , tcpnodelay و tcpnopush)
  • پیکربندی تنظیمات کلی مربوط به صفحات application - توسط (root و index)
  • فراهم کردن hash table های مختلف که برای ذخیره type های مختلف داده استفاده می شود - (hashbucket_size و hashmaxsize برای servernames , types و variables)

این ها تنظیماتی هستند که اگر بخواهید می توانید از آن ها استفاده کنید اما از برخی از آن ها به وفور استفاده می شوند.

باتشکر.
ITPRO باشید!
#بهینه_سازی_وب_سرور_nginx #وب_سرور_nginx

علی سفیدموی
علی سفیدموی

فارغ التحصیل رشته مهندسی سخت افزار دانشگاه شاهد هستم. به حوزه شبکه علاقه مند می باشم و دوره MCSE را در مجتمع فنی تهران شعبه ابن سینا گذرانده ام. به یادگیری و کار تیمی علاقه مند می باشم. در زمینه هایی از قبیل high availability و load balancing سرور های لینوکسی در شرکت ویراتک شریف دارای تجربه می باشم. علاقه مند به انجام پروژه در زمینه شبکه های کامپیوتری هستم. در حوزه برنامه نویسی و توسعه اپلیکیشن های تحت وب فعالیت داشته و دارم. به عنوان کاربر نویسنده نیز چندین مطلب تخصصی در حوزه فناوری اطلاعات در

نظرات