برای مشاهده یافته ها از کلید Enter و برای خروج از کلید Esc استفاده کنید.

آموزش تنظیم بلاک سرور [Virtual Hosts] برای Nginx در CentOS 7

مقدمه

Nginx یکی از معروف ترین وب سرور ها در بین متخصصین حوزه IT میباشد. همانطور که در پست های پیشین نیز این وب سرور معرفی شد. انجین ایکس در بسیاری از سایت ها و کمپانی ها در حال استفاده میباشد. این وب سرور در بسیاری از نقاط سبکتر و بهتر از وب سرور آپاچی بوده و میتوانید بصورت Reverse Proxy نیز مورد استفاده قرار بگیرد. Nginx برای مدیریت دامنه و سایت ها از Server Block استفاده میکند. بلاک سرور با استفاده از سیستم تطابق [Matching System] جهت میزبانی دامنه استفاده می شود.

wikiconfig.ir-nginx server blocks

 هر دامنه میتواند طوری تنظیم شود تا بازدید کننده را به دایرکتوری مورد نظر هدایت کند. این متد میتواند برای تعداد نامحدودی وابسته به میزان قدرت سرور شما دامنه را میزبانی کند. با این روش شما میتوانید تنظیمات مورد نظر خود را روی هر دامنه بطور مجدا پیاده سازی نمایید.در این مقاله در مورد ایجاد Server Blocks در پلتفرم لینوکس توضیع CentOS 7 بحث خواهد شد که علاوه بر این نحوه ارائه محتوای مختلف به کاربران مختلف با توجه به نوع دامنه را خواهید اموخت.

پیش نیازها

در ابتدا یک سرور مجازی با IP استاتیک و یا لوکال با سیستم عامل Centos7 ایجاد نمایید. قبل از شروع اموزش باید چند مرحله را جهت اماده سازی سرور برای ایجاد تغییرات انجام دهید. در ابتدا نیاز است تا به سرور خود از طریق یک کاربر غیر root با دسترسیsudo  داشته باشید. نحوه ایجاد کاربر sudo در مقالات پیشین آموزش داده شده است. در صورتصب نبودن Nginx باید ان را نصب نمایید. هرچند نصب این وب سرور در ادامه مقاله بصورت Short Referance آموزش داده میشود اما در مقالات پیشین نیز نصب Nginx بطور کامل آموزش داده شده است.

برای نصب از طریق SSH به سرور خود متصل شوید. در ابتدا باید مخزن اینجین ایکس را به لیست نرم افزاری سنتوس اضافه نمایید:

سپس به راحتی با دستور زیر این وب سرور نصب خواهد شد:

پس از پایان نصب به یوزر ایجاد شده که دسترسی های sudo به ان داده شده است وارد شده و ادامه اموزش را با استفاده از Sudo User خود  انجام دهید.

توجه: در این اموزش از دامنه domain1.com و domain2.com جهت پیاده سازی مثال ها استفاده میکند. این دامنه ها فقط برای پیاده سازی مثال ها در اموزش استفاده میشود و برای یک سناریو واقعی باید دامنه خود را جایگرین دامنه ها نمایید. برای داشتن تنظیمات DNS استندارد باید سرویس Bind در سرور شما نصب و کانفیگ شود تا دامنه شما NS های اختصاصی خود را جهت اتصال به سرور داشته باشد. پس از راه اندازی سرویس Bind دامنه شما به سرور متصل و از طریق Virtual Host یا همان Server blocks به دایرکتوری دلخواه دسترسی خواهند داشت. البته بدون راه اندازی سروی bind نیز میتوانید این عملیات را انجام دهید هرچند کیفیت کار و قابلیت ان کمتر خواهد بود.

مرحله اول – ایجاد دایرکتوری محتوا برای دامنه

در ابتدا نیاز است تا دایرکتوری های مورد نیاز برای قرار دادن محتوای دو سایت مورد نظر ما ساخته شود. شاخه مربوط به ریشه را (Root Document) در سطح بالای دایرکتوری محتوا یعنی در ادرس var/www/ قرار میدهیم. ما برای هر بلاک سرور در داخل دایرکتوری ذکر شده یک دایرکتوری محتوا خواهیم ساخت. در داخل دایرکتوری هر دامنه یک دایرکتوری html نیز خواهیم ساخت تا فایل ها در ان قرار داده شود. این عمل در صورت ایجاد میزبانی قابلیت های دیگری نیز در اعمال سیاست های امنیتی و دسترسی در اختیار ما قرار خواهد شد.

با استفاده از دستور mkdir میتوانید دایرکتوری های مورد نیاز خود را ایجاد نمایید.(سوییچ p- ادرس ساخت دایرکتوری را برسی کرده و در صورت عدم وجود پوشه ان را ایجاد خواهد کرد. این قابلت امکان ساخت دایرکتوری های تودرتو را فراهم میکند) برای ساخت دایرکتوری برای دامنه های مورد نظر دستورات زیر را در محیط شل ssh وارد نمایید:

 در خاطر داشته باشید نام های domain1.com و domain2.com نام دامنه هایی است که میخوایم در سرور میزبانی شود. این نام ها میتواند به سلیقه شما نیز انتخاب شود و فقط بخاطر خوانایی به این شکل انتخاب شود.

تغییر مالکیت فایل و پوشه های دایرکتوری var/html/

پس از ایجاد دایرکتوری باید به پوشه های ایجاد شده دسترسی کاربر مورد نظر را بدهیم. دایرکتوری var/www/ چون توسط یوزر root ایجاد شده است در مالکیت کاربر root میباشد. برای ایجاد دسترسی باید مالکیت فایل ها تغییر یابد در غیر این صورت با ارور 403 یا عدم داشتن مجوز دسترسی رو به رو خواهد شد. با استفاده از دستور chown مالکیت فایل ها را با دستور زیر تغییر میدهم:

بجای متغییر USER در دستورات بالا نام کاربر sudo که از قبل ایجاد کرده اید و هم اکنون نیز در ان وارد شده اید را وارد نمایید. با اجرای دستورات بالا نام کاربری مورد نظر ما مالک تمامی دایرکتوری public_html خواهد شد. دسترسی استاندارد برای پوشه ها در هاستینگ 755 میباشد. برای تغییر دسترسی پوشه ریشه و سابدایرکتوری ها دستور زیر را وارد نمایید:

 وب سرور باید برای ارائه محتوا به بازدیدکننده و یوزر شما باید جهت ایجاد و یا تغییر محتوا دسترسی های لازم را داشته باشد که با وارد کردن دستورات بالا این مجوز صادر خواهد شد.

مرحله دوم – ایجاد صفحه دمو برای هر سایت

پس ایجاد دایرکتوری بیاید تا صفحاتی را برای ارائه ایجاد نماییم، البته صفحات برای تست بوده و از کد ساده برای ایجاد این page ها استفاده میکنیم. برای domain1.com یک فایل index.html ایجاد نمایید نمایید. برای این منظور دستور زیر را در ssh وارد نمایید:

پس از باز کردن یک فایل جدید حرف i را بزنید تا ادیتور به حالت insert وارد شود تا بتوانید کد را در ان وارد نمایید (میتوانید کد را کپی و در ان پیست کنید) سپس کد Html زیر را در ان وارد نمایید تا دامنه domain1.com را نمایش دهید:

پس از وارد کردن کد کلید esc و : را وارد کرده سپس حرف x را زده و کلید Enter را بزنید تا تغییرات ذخیره گردد. برای سایت domain2.com نیز میتوانید به راحتی فایل ایجاد شده را در ان کپی کرده و ان را ویرایش نمایید. برای کپی فایل ایجاد شده دستور زیر را در محیط شل وارد نمایید:

سپس فایل html مربوط به domain2.com را باز کرده:

و با استفاده از راهنمای بالا فایل را ویرایش و domain1.com را به domain2.com تبدیل نمایید تا مانند کد زیر گردد:

توجه داشته باشید برای ویرایش فایل در لینوکس میتوانید از ادیتور های متنی دلخواه مانند nano نیز استفاده نمایید. پس از ویرایش فایل html را ذخیره نمایید.

مرحله سوم – ایجاد Server Block یا همان بلاک سرور جدید

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

برای شروع باید دایرکتوری که بلاک های سرور در ان ساخته میشود را ایجاد نماییم. دایرکتوری sites-available فایل های بلاک سرور را نگه داری کرده و دایرکتوری sites-enabled نیز لینک بلاک های سرور که قرار است منتشر شود را نگهداری میکند. جهت ایجاد دایرکتوری های مورد نیاز کافیست دستورات زیر را خط به خط در محیط shell اجرا نمایید:

توجه: در نظر داشته باشید این معماری در نظر گرفته شده برای ایجاد دایرکتوری در توضیع های Debian استفاده میشود که به دلیل Maintenance  و نگهداری اسانتر ما نیز در این مقاله از این روش استفاده میکنیم.

در قدم بعدی باید به nginx بگویید تا برای فراخوانی سرور بلاک ها دایرکتوری site-enabled را جستجو کنید. برای این منظور باید فایل تنظیمات اصلی nginx را باز کرده:

و خطوط زیر را به انتهای بلاک {} http اضافه کنید:

خط اول مشخص میکند که nginx باید برای بلاک سرور دایرکتوری site-enabled را جستجو کند و خط دوم نیز میزان فضای حافظه جهت parse کردن دامنه را افزایش می دهد. پس از انجام تغییرات بالا فایل تنظیمات را ذخیره نمایید. حالا وب سرور اماده شده و زمان ان است تا فایل سرور بلاک را ایجاد نماییم.

ایحاد فایل بلاک سرور

بصورت پیشفرض nginx از بلاک سرور پیشفرض به نام default.conf استفاده میکند که میتوانیم به عنوان بلاک نمونه ما نیز از ان استفاده نماییم. برای ایجاد اولین فایل بلاک سرور فایل default.conf را به دایرکتوری site-available کپی میکنیم:

تذکر: تمامی فایل های تنظیمات باید پسوند conf. داشته باشد.

با صرف نظر از خطوطی که غیر فعال یا اصطلاحا Comment شده بلاک ایجاد شده شامل خطوط زیر است:

 

در ابتدا یک نگاه کوتاه به کد کانفیگ بالا داشته باشید. اولین چیزی که باید تغییر داده شود متغیر server_name میباشد که به nginx میگوید کدام درخواست های سمت سرور به دامنه مشخص شده هدایت شود. برای دامنه مورد نظر ما باید ادرس را هم بصورت domain1.com و هم www.domain1.com را برای server_name مشخص کنیم تا درخواست های ارسال شده از این دامنه هم با www و هم بدون www به بلاک این دامنه ارسال شود، بنا بر این localhost را برداشته و ان را بصورت زیر ویرایش میکنیم:

تذکر: هر دستور در nginx باید تا ; تمام شود، پس اگر زمانی با مشکل مواجه شدید کد های خود را برسی کنید تا با ; تمام شده باشد.

پس از تنظیم server_name باید به سراغ تنظیم root document برویم! (مفهوم root document با یوزر root در لینوکس متفاوت است) root document یا همان ریشه محتوا مسیری است که دامنه زمان فراخوانی شدن توسط کاربر ان را به کاربر نمایش میدهد. در کد بلاک سرور نام این متغییر که باید ادرس بگیرد root میباشد. برای این منظور ما ادرس مورد نظر خود را برای دامنه domain1.com مشخص میکنیم. متغیر root را بصورت زیر ویرایش کنید:

متغییر try_files مانند متغیر های بالا در کد بصورت پیشفرض وجود ندارد و به این دلیل به کد اضافه میشود تا زمانی که کاربر درخواست فایل و یا صفحه ای که وجود ندارد را به دامنه فرستاد این درخواست را با ارور 404 پاسخ دهید. برای این منظور کد زیر را نیز به فایل کانفیگ بلاک سرور اضافه میکنیم:

در انتها کد فایل کانفیگ ما بصورت زیر خواهد بود:

پس از ویرایش و ایجاد تغییرات لازم فایل کانفیگ را ذخیره و از ادیتور خارج شود. برای ایجاد دومین فایل کانفیگ نیز میتوانید فایل ایجاد شده را کپی کرده و مغییر دامنه و root document را ویرایش نمایید:

فایل کپی شده را با ویرایشگر باز کنید:

سپس تغییرات لازم را در ان ایجاد کنید، فایل domain2.com.conf نیز بصورت زیر خواهد شد:

زمانی که تغییرات لازم را ایجاد کردید فایل را ذخیره و از ان خارج شود.

مرحله چهارم – فعال کردن بلاک های سرور ایجاد شده

برای فعال کردن بلاک های سرور ایجاد شده باید ان را فعال کنید تا nginx ان را به بازدید کننده نمایش دهد. برای فعال سازی بلاک سرور کافیست تا با دستور ln یک لینک دسترسی در دایرکتوری sites-enabled ایجاد نمایید. برای ایجاد لینک برای هر سرور بلاک دستورات زیر را وارد نمایید:

دستور بالا یک soft link برای هر سرور بلاک در دایرکتوری sites-enabled ایجاد میکند. زمانی که تغییرات را اعمال کردید باید وب سرور را ریستارت کنید تا تغییرات اعمال شود:

مرحله پنجم – تنظیم فایل Local Hosts

انجام این مرحله دلخواه میباشد! اگر از دامنه های غیر معتبر استفاده میکنید و فقط برای یادگیری و تست این عملیات را انجام میدهید میتوانید از دامنه های دلخواه استفاده نمایید، اما باید این مرحله را نیز انجام دهید تا دامنه های انتخابی شما بصورت Local فراخوانی شود. برای این منظور باید فایل hosts را ویرایش کرده و مشخص کنید دامنه های مورد نظر شما از IP سرور شما لود شود(این راه فقط برای تست و تمرین کارامد میباشد و دامنه های مشخص شده به شکل زیر فقط بصورت لوکال در دسترس میباشد). برای این منظور فایل hosts را با ویرایشگر متنی باز میکنیم:

پس از باز کردن فایل مورد نظر تغییرات زیر را در ان اعمال نمایید:

توجه داشته باشید باید server_ip_address را حذف و IP سرور خود را وارد نمایید. اگر از VM در VMware و یا یک VPS با IP معتبر استفاده میکنید میتوانید IP خود را با وارد کردن دستور ifconfig ببینید. برای نمونه فایل hosts پس از ویرایش بصورت زیر خواهد بود:

همانطور که گفته شد این تنظیمات درخواست های دامنه domain1.com و domain2.com را به IP لوکال جهت برسی ارسال میکند.

مرحله ششم – تست

در این مرحله تمامی تنظیمات مورد نظر ما انجام داده شده و برای تست کافیست نام دامنه های ایجاد شده را در مرورگر وارد نمایید اگر با متن زیر مواجه شدید یعنی تمامی مراحل به درستی انجام شده است:

server_block_success

پس از تست دامنه domain1.com دامنه domain2.com را نیز تست کنید اگر این ادرس نیز درست بود شما مراحل را به درستی انجام داده اید.

پس از این میتوانید از روش بالا برای اضافه کردن دامنه به وب سرور خود استفاده کنید فقط به یاد داشته باشید اگر سناریو شما واقعی بوده و از IP استاتیک و سرور استفاده میکنید برای دسترسی دامنه در اینترنت نباید مرحله پنجم را انجام دهید.

در صورتی که سوالی در هر مرحله برای شما به وجود امد لطفا سوال خود را در بخش نظرات مطرح نمایید.


موفق و پیروز باشید

منبع “WikiConfig