در مدت زمان کوتاهی که NGINX توسعه داده شد و در اختیار همگان قرار گرفت (کمی بیش از 10 سال)، به خاطر کارایی بالا (performance) و مصرف پایین حافظه (low memory usage)، رشد ثابت و محفوظی در بین وب سرورها داشته است.
از آنجایی که Nginx یک نرم افزار رایگان و Opensource می باشد، از طرف هزاران نفر از مدیران Web Server ها (نه تنها در سرور های Linux و Unix بلکه در سرورهای Microsoft Windows) در اقصی نقاط جهان مورد قبول واقع شده است.
برای آنهایی که زیاد از Apache استفاده می کردند، ممکن است یادگیری Nginx کمی دشوار باشد (حداقل برای من که بود) ولی به محض این که چند وب سایت را با آن راه اندازی کنید و به بررسی ترافیک سایتها و آمار مصرف منابع آنها بپردازید، متوجه نتیجه خارق آلعاده این وب سرور می شوید.
در این مقاله به نحوه استفاده از Nginx برای راه اندازی سرورهای مجازی بر اساس نام و بر اساس IP در سرورهای CentOS/RHEL 7 و Debian 8 و مشتقات آنها می پردازیم و با Ubuntu 15.04 و Spin-off های آن شروع می کنیم.
سناریوی آزمایشی ما برای مقاله فوق به صورت زیر است :
نصب Nginx Web Server
اگر هنوز Nginx را نصب ندارید لطفآ آن را نصب کنید. اگر فکر می کنید برای راه اندازی آن نیاز به کمک دارید با یک جستجوی ساده Nginx در همین وب سایت چندین مقاله در مورد آن خواهید یافت. بر روی علامت ذره بین در بالای همین صفحه کلیک کنید و کلمه کلیدی Nginx را جستجو کنید. و اگر نمی دانید چگونه آن را پیدا کنید اصلا نگران نباشید، لینک های مرتبط با Nginx را در اینجا برای شما گذاشته ام، فقط دقت کنید که مطابق با سیستم عاملی که دارید لینک را انتخاب کنید و سپس اقدام به نصب Nginx نمایید.
پس از نصب Nginx دوباره می توانید به ادامه این مقاله آموزشی بپردازید.
ساخت virtual hosting بر اساس Name در Nginx :
همان طور که خودتان می دانید، یک virtual hosting در واقع وب سایتی است که توسط Nginx در VPS تک ابری یا سرور فیزیکی سرویس دهی می شود. با وجود اینکه در اسناد و متون مربوط به Nginx با عبارت “Server Blocks” به جای آنها مواجه می شویم ولی اینها در واقع بیانگر یک مفهوم هستند.(با اسامی متفاوت)
اولین گام برای راه اندازی virtual hosting ایجاد یک یا چند Block Server در فایل Configuration اصلی به آدرس (/etc/nginx/nginx.conf) و یا (/etc/nginx/sites-available) است ( در اینجا از 2 تا Server Block استفاده می کنیم، هر کدام برای یکی از دامنه های فرضی که داریم)
با وجود این که شما می توانید نام فایل پیکربندی را در این دایرکتوری (Site-available) هر چه می خواهید بنامید ولی بهتر است نام دامنه را برای آن برگزینید و پسوند .conf را به انتهای نام این فایل اضافه کنید.
Server Block ها می توانند بسیار پیچیده باشند ولی در مدل های اولیه خود شامل متن زیر می باشند :
در مسیر /etc/nginx/site-available/tecmintlovesnginx.com.conf :
و در /etc/nginx/sites-available/nginxmeanspower.com.conf :
شما می توانید از بلاکهای بالا استفاده کنید تا شروع به راه اندازی virtual hosting خود کنید و یا می توانید فایل هایی با ساختاری اولیه از /etc/nginx/sites-vailable/default (در دبیان) و یا etc/nginx.conf.default (در CentOS) ایجاد کنید.
پس از کپی کردن، سطح مالکیت و سطح اجازه به فایل را تغییر دهید :
Debian و مشتقات
CentOS و RHEL
وقتی این کار به اتمام رسید شما باید برای جلوگیری از تضاد و درهم و برهمی فایل نمونه را پاک کنید یا نام آن را تغییر دهید.
لطفآ توجه داشته باشید که علاوه بر موارد فوق باید دایرکتوری برای لاگ ها (/var/www/logs) ایجاد کنید و به کاربران Nginx (انجینکس) (nginx یا www-data، بسته به این که Nginx را در CentOS یا Debian راه اندازی کرده اید) دسترسی خواندن و نوشتن دهید :
حال باید با ایجاد symlink به فایل فوق در دایرکتوری sites-enabled میزبان مجازی (virtual hosting) فعال شود :
سپس یک فایل html با نام index.html برای هر virtual hosting در داخل /var/www/<domain name>/public_html ایجاد کنید (<domain name> را به نام دامنه مورد نظر تغییر دهید). کد زیر را در صورت لزوم تغییر دهید :
در انتها Nginx Configuration را تست کنید و وب سرور را Start کنید و در صورت وقوع هر گونه خطا آن را رفع کنید :
و در سیستم لوکال خود خط های زیر را در فایل /etc/hosts اضافه کنید که در حقیقت روش اصلی برای resolve کردن نام می باشد.(تبدیل ip به name) :
سپس یک صفحه وب باز کنید و به URL هایی که در بالا لیست شده اند بروید :
برای اضافه کردن به virtual hosting در Nginx، هر چند بار که می خواهید مراحلی که تا اینجا توضیخ داده شد را اجرا کنید.
virtual hosting بر پایه IP در Nginx :
بر خلاف virtual hosting بر پایه نام که همه میزبان ها توسط یک آدرس IP در دسترس هستند، virtual hosting بر پایه IP هر بار نیازمند یک ترکیب IP:Port متفاوت هستند.
با استفاده از آن، یک وب سرور به هنگام دریافت request، سایت های متفاوتی را با توجه به ip address و port در جواب برمیگرداند.
از آنجاییکه در متد virtual hosting بر اساس نام، ما مزیت و امکان به اشتراک گذاری یک ip address و port را داریم، باعث میشود که آنها برا وب سرورهای همه منظوره مناسب و استاندارد باشند و قطعا این متد انتخاب خواهد شد مگر اینکه ورژن Nginx شما Server Name Identification یا SNI را ساپورت نکند و دلیل آن نیز می تواند منسوخ بودن ورژن آن باشد و یا ممکن است بدون گزینهُ with-http-ssl-module کامپایل شده باشد.
اگر
خط مارک شده در تصویر زیر را نمایش ندهد شما باید Nginx خود را به روز رسانی کنید و یا آن را دوباره کامپایل نمایید.
با فرض این که تا کنون همه چیز خوب پیش رفته است، باید به این نکته توجه کنیم که یک پیش نیاز دیگر برای virtual hosting بر پایه IP، در دسترس بودن IP های جداگانه می باشد. چه با تخصیص آنها به اینترفیس های شبکه های مجزا و یا از طریق استفاده از IP های مجازی (که با عنوان IP aliasing نیز شناخته می شود).
برای اجرای IP aliasing در Debian (با فرض اینکه شما از eth0 استفاده می کنید) /etc/network/interfaces را به صورت زیر اصلاح کنید :
Debian and Derivatives
در مثال بالا ما 2 عدد NIC مجازی از بین eth0: eth0:1(192.168.0.25) و eth0:2(192.168.0.26) ایجاد کردیم.
CentOS و RHEL
در CentOS (سنت او اس)، /etc/sysconfig/network-scripts/ifcfg-enp0s3 را به ifcfg-enp0s3:1 تغییر دهید و یک کپی از آن با نام ifcfg-enp0s3:2 بگیرید، و سپس به ترتیب تغییرات زیر را اعمال نمایید :
و
وقتی تغییرات فوق اعمال شد سرویس شبکه را restart کنید :
سپس تغییرات فوق را در سرور های بلاک که پیش تر در این مقاله در مورد آنها توضیح دادم اعمال نمایید.
در مسیر /etc/nginx/sites-available/tecmintlovesnginx.com.conf
در مسیر /etc/nginx/sites-available/nginxmeanspower.com.conf
سرانجام، برای اینکه تغییرات فوق اعمال شود Nginx را Restart کنید :
و فراموش نکنید که به صورت زیر /etc/hosts *لوکال خود را به روز رسانی کنید :
بدین ترتیب، هر درخواستی که با 192.168.0.25 و 192.168.0.26 در پورت 80 ساخته می شود به ترتیب tecmintlovesnginx.com و nginxmeanspower.com را در جواب باز خواهد گرداند.
همانطور که در تصویر بالا می بینید، اکنون 2 تا virtual hosting بر پایه IP داریم که تنها از یک NIC ولی با دو IP alias متفاوت در سرور شما استفاده می کنند.
خلاصه
در این مقاله آموزشی توضیح دادم که چطور virtual hosting بر پایه نام و بر پایه IP در Nginx را راه اندازی کنیم. اگرچه احتمالآ می خواهید ازگزینه اول استفاده کنید، خوب است که این را بدانید که گزینه دیگر هم اگر به آن نیاز داشتید موجود است - البته پیشنهاد می شود این تصمیم را بعد از بررسی واقعیات بیان شده در این مقاله اخذ کنید.
بعلاوه، بهتر است آموزش های مربوط به Nginx را که بسیار ارزشمند هستند و در هنگام ایجاد و تنظیم سرورهای بلاک مراجع خوبی می باشند مطالعه کنید که لینک آنها در این مقاله گذاشته شده. شمار منابع وسیع و در دسترس برای تنظیم و راه اندازی این وب سرور غیر قابل باور است.
از آنجایی که Nginx یک نرم افزار رایگان و Opensource می باشد، از طرف هزاران نفر از مدیران Web Server ها (نه تنها در سرور های Linux و Unix بلکه در سرورهای Microsoft Windows) در اقصی نقاط جهان مورد قبول واقع شده است.
برای آنهایی که زیاد از Apache استفاده می کردند، ممکن است یادگیری Nginx کمی دشوار باشد (حداقل برای من که بود) ولی به محض این که چند وب سایت را با آن راه اندازی کنید و به بررسی ترافیک سایتها و آمار مصرف منابع آنها بپردازید، متوجه نتیجه خارق آلعاده این وب سرور می شوید.
در این مقاله به نحوه استفاده از Nginx برای راه اندازی سرورهای مجازی بر اساس نام و بر اساس IP در سرورهای CentOS/RHEL 7 و Debian 8 و مشتقات آنها می پردازیم و با Ubuntu 15.04 و Spin-off های آن شروع می کنیم.
سناریوی آزمایشی ما برای مقاله فوق به صورت زیر است :
- سیستم عامل: Debian 8 Jessie Server [IP 192.168.0.25]
- درگاه: Router [ 192.168.0.1]
- وب سرور: Nginx 1.6.2-5
- دامنه های فرضی :
کد PHP:
http://www.tecmintlovesnginx.com/
و
http://www.nginxmeanspower.com/
نصب Nginx Web Server
اگر هنوز Nginx را نصب ندارید لطفآ آن را نصب کنید. اگر فکر می کنید برای راه اندازی آن نیاز به کمک دارید با یک جستجوی ساده Nginx در همین وب سایت چندین مقاله در مورد آن خواهید یافت. بر روی علامت ذره بین در بالای همین صفحه کلیک کنید و کلمه کلیدی Nginx را جستجو کنید. و اگر نمی دانید چگونه آن را پیدا کنید اصلا نگران نباشید، لینک های مرتبط با Nginx را در اینجا برای شما گذاشته ام، فقط دقت کنید که مطابق با سیستم عاملی که دارید لینک را انتخاب کنید و سپس اقدام به نصب Nginx نمایید.
- آموزش نصب Nginx در لینوکس دبیان 9
- آموزش نصب Nginx در RedHat/CentOS 7.0
- پسورد گذاشتن روی (فولدر، پوشه، دایرکتوری) در وب سرور انجین ایکس
پس از نصب Nginx دوباره می توانید به ادامه این مقاله آموزشی بپردازید.
ساخت virtual hosting بر اساس Name در Nginx :
همان طور که خودتان می دانید، یک virtual hosting در واقع وب سایتی است که توسط Nginx در VPS تک ابری یا سرور فیزیکی سرویس دهی می شود. با وجود اینکه در اسناد و متون مربوط به Nginx با عبارت “Server Blocks” به جای آنها مواجه می شویم ولی اینها در واقع بیانگر یک مفهوم هستند.(با اسامی متفاوت)
اولین گام برای راه اندازی virtual hosting ایجاد یک یا چند Block Server در فایل Configuration اصلی به آدرس (/etc/nginx/nginx.conf) و یا (/etc/nginx/sites-available) است ( در اینجا از 2 تا Server Block استفاده می کنیم، هر کدام برای یکی از دامنه های فرضی که داریم)
با وجود این که شما می توانید نام فایل پیکربندی را در این دایرکتوری (Site-available) هر چه می خواهید بنامید ولی بهتر است نام دامنه را برای آن برگزینید و پسوند .conf را به انتهای نام این فایل اضافه کنید.
Server Block ها می توانند بسیار پیچیده باشند ولی در مدل های اولیه خود شامل متن زیر می باشند :
در مسیر /etc/nginx/site-available/tecmintlovesnginx.com.conf :
کد PHP:
server {
listen 80;
server_name tecmintlovesnginx.com www.tecmintlovesnginx.com;
access_log /var/www/logs/tecmintlovesnginx.access.log;
error_log /var/www/logs/tecmintlovesnginx.error.log error;
root /var/www/tecmintlovesnginx.com/public_html;
index index.html index.htm;
}
کد PHP:
server {
listen 80;
server_name nginxmeanspower.com www.nginxmeanspower.com;
access_log /var/www/logs/nginxmeanspower.access.log;
error_log /var/www/logs/nginxmeanspower.error.log error;
root /var/www/nginxmeanspower.com/public_html;
index index.html index.htm;
}
پس از کپی کردن، سطح مالکیت و سطح اجازه به فایل را تغییر دهید :
کد:
# chmod 660 /etc/nginx/sites-available/tecmintlovesnginx.com.conf # chmod 660 /etc/nginx/sites-available/nginxmeanspower.com.conf
کد:
# chgrp www-data /etc/nginx/sites-available/tecmintlovesnginx.com.conf # chgrp www-data /etc/nginx/sites-available/nginxmeanspower.com.conf
کد:
# chgrp nginx /etc/nginx/sites-available/tecmintlovesnginx.com.conf # chgrp nginx /etc/nginx/sites-available/nginxmeanspower.com.conf
لطفآ توجه داشته باشید که علاوه بر موارد فوق باید دایرکتوری برای لاگ ها (/var/www/logs) ایجاد کنید و به کاربران Nginx (انجینکس) (nginx یا www-data، بسته به این که Nginx را در CentOS یا Debian راه اندازی کرده اید) دسترسی خواندن و نوشتن دهید :
کد:
# mkdir /var/www/logs # chmod -R 660 /var/www/logs # chgrp <nginx user> /var/www/logs
کد:
# ln -s /etc/nginx/sites-available/tecmintlovesnginx.com.conf /etc/nginx/sites-enabled/tecmintlovesnginx.com.conf # ln -s /etc/nginx/sites-available/nginxmeanspower.com.conf /etc/nginx/sites-enabled/nginxmeanspower.com.conf
کد:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Tecmint loves Nginx</title> </head> <body> <h1>Tecmint loves Nginx!</h1> </body> </html>
کد:
# nginx -t && systemctl start nginx
و در سیستم لوکال خود خط های زیر را در فایل /etc/hosts اضافه کنید که در حقیقت روش اصلی برای resolve کردن نام می باشد.(تبدیل ip به name) :
کد:
192.168.0.25 tecmintlovesnginx.com 192.168.0.25 nginxmeanspower.com
برای اضافه کردن به virtual hosting در Nginx، هر چند بار که می خواهید مراحلی که تا اینجا توضیخ داده شد را اجرا کنید.
virtual hosting بر پایه IP در Nginx :
بر خلاف virtual hosting بر پایه نام که همه میزبان ها توسط یک آدرس IP در دسترس هستند، virtual hosting بر پایه IP هر بار نیازمند یک ترکیب IP:Port متفاوت هستند.
با استفاده از آن، یک وب سرور به هنگام دریافت request، سایت های متفاوتی را با توجه به ip address و port در جواب برمیگرداند.
از آنجاییکه در متد virtual hosting بر اساس نام، ما مزیت و امکان به اشتراک گذاری یک ip address و port را داریم، باعث میشود که آنها برا وب سرورهای همه منظوره مناسب و استاندارد باشند و قطعا این متد انتخاب خواهد شد مگر اینکه ورژن Nginx شما Server Name Identification یا SNI را ساپورت نکند و دلیل آن نیز می تواند منسوخ بودن ورژن آن باشد و یا ممکن است بدون گزینهُ with-http-ssl-module کامپایل شده باشد.
اگر
کد:
# nginx -V
با فرض این که تا کنون همه چیز خوب پیش رفته است، باید به این نکته توجه کنیم که یک پیش نیاز دیگر برای virtual hosting بر پایه IP، در دسترس بودن IP های جداگانه می باشد. چه با تخصیص آنها به اینترفیس های شبکه های مجزا و یا از طریق استفاده از IP های مجازی (که با عنوان IP aliasing نیز شناخته می شود).
برای اجرای IP aliasing در Debian (با فرض اینکه شما از eth0 استفاده می کنید) /etc/network/interfaces را به صورت زیر اصلاح کنید :
Debian and Derivatives
کد:
auto eth0:1 iface eth0:1 inet static address 192.168.0.25 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 auto eth0:2 iface eth0:2 inet static address 192.168.0.26 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1
CentOS و RHEL
در CentOS (سنت او اس)، /etc/sysconfig/network-scripts/ifcfg-enp0s3 را به ifcfg-enp0s3:1 تغییر دهید و یک کپی از آن با نام ifcfg-enp0s3:2 بگیرید، و سپس به ترتیب تغییرات زیر را اعمال نمایید :
کد:
DEVICE="enp0s3:1" IPADDR=192.168.0.25
کد:
DEVICE="enp0s3:2" IPADDR=192.168.0.26
کد:
# systemctl restart networking
در مسیر /etc/nginx/sites-available/tecmintlovesnginx.com.conf
کد:
listen 192.168.0.25:80
کد:
listen 192.168.0.26:80
کد:
# systemctl restart nginx
کد:
192.168.0.25 tecmintlovesnginx.com 192.168.0.26 nginxmeanspower.com
همانطور که در تصویر بالا می بینید، اکنون 2 تا virtual hosting بر پایه IP داریم که تنها از یک NIC ولی با دو IP alias متفاوت در سرور شما استفاده می کنند.
خلاصه
در این مقاله آموزشی توضیح دادم که چطور virtual hosting بر پایه نام و بر پایه IP در Nginx را راه اندازی کنیم. اگرچه احتمالآ می خواهید ازگزینه اول استفاده کنید، خوب است که این را بدانید که گزینه دیگر هم اگر به آن نیاز داشتید موجود است - البته پیشنهاد می شود این تصمیم را بعد از بررسی واقعیات بیان شده در این مقاله اخذ کنید.
بعلاوه، بهتر است آموزش های مربوط به Nginx را که بسیار ارزشمند هستند و در هنگام ایجاد و تنظیم سرورهای بلاک مراجع خوبی می باشند مطالعه کنید که لینک آنها در این مقاله گذاشته شده. شمار منابع وسیع و در دسترس برای تنظیم و راه اندازی این وب سرور غیر قابل باور است.