Nginx یکی از محبوب‌ترین وب‌سرورهای جهان است و میزبانی تعداد زیادی از پربازدیدترین وب‌سایت‌های اینترنتی را بر عهده دارد. این سرویس به عنوان یک وب‌سرور با ارایه‌ی حداکثر کارایی (Performance) و پایداری (Stability) طراحی شده است و به عنوان Reverse Proxy، Load Balancer و Cache Server نیز استفاده می‌شود.

در این راهنما، روی یک ابرک با سیستم‌عامل Ubuntu 20.04، شیوه‌ی نصب Nginx، تنظیم فایروال، مدیریت Processهای Nginx و راه‌اندازی Server Block برای میزبانی چند دامنه روی یک سرور را بررسی خواهیم کرد.

پیش‌نیازها

پیش از شروع، نیاز به یک user معمولی (غیر از root) با دسترسی‌های sudo دارید.

هم‌چنین به شکل اختیاری نیاز به یک دامنه برای مراحل پایانی راهنما نیاز خواهید داشت. برای راهنمایی در خصوص ثبت و مدیریت DNS دامنه می‌توانید راهنمای سرویس DNS را بررسی کنید.

گام نخست: نصب Nginx

از آن‌جایی که Nginx در مخازن پیش‌فرض Ubuntu موجود است، می‌توان آن را از طریق این مخازن و با استفاده از apt نصب کرد.

با توجه به این‌که این اولین تعامل ما با apt در این راهنماست، ابتدا لیست Packageهای خود را به‌روز می کنیم تا به آخرین و به‌روزترین Packageها دسترسی داشته باشیم. پس از آن، می توانیم Nginx را نصب کنیم:

sudo apt update
sudo apt install nginx

پس از پذیرش این فرآِیند، Nginx و همه‌ی وابستگی‌های مورد نیاز روی ابرک نصب می‌شود.

گام دوم: تنظیم فایروال

برای دسترسی به سرویس Nginx نیاز است تا پیش از هر کاری، فایروال ابرک را تنظیم کنیم. Nginx سرویسی است که همرا با ufw نصب می‌شود تا به‌راحتی امکان تنظیمات دسترسی را داشته باشید.

با وارد کردن دستور زیر می‌توانید سرویس‌هایی که ufw می‌تواند با آن‌ها کار کند را مشاهده کنید.

sudo ufw app list

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

همان‌طور که در خروجی نمایش داده می‌شود، سه پروفایل برای Nginx وجود دارد:

  • Nginx Full: این پروفایل هم پورت 80 (ترافیک وب عادی و رمزگذاری نشده) و هم پورت 443 (ترافیک رمزگذاری شده TLS/SSL) را باز می کند.
  • Nginx HTTP: این پروفایل فقط پورت 80 را باز می کند. (ترافیک وب عادی و رمزگذاری نشده)
  • Nginx HTTPS: این پروفایل فقط پورت 443 را باز می کند. (ترافیک رمزگذاری شده TLS/SSL)

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

شما می توانید این کار را با وارد کردن دستور زیر انجام دهید:

'sudo ufw allow 'Nginx HTTP

به کمک دستور زیر از اعمال شدن تغییر اطمینان حاصل کنید:
sudo ufw status

خروجی، نشان‌دهنده‌ی این است که کدام ترافیک HTTP مجاز شده است:

گام سوم: بررسی وب‌سرور

در پایان مراحل نصب، سیستم‌عامل، Nginx را راه اندازی می کند؛ بنابراین اکنون باید وب‌سرور، فعال و در حال اجرا باشد.

به کمک system و دستور زیر می‌توانیم بررسی کنیم که سرویس به درستی در حال اجرا باشد:

systemctl status nginx

همان‌طور که در خروجی تایید شد، سرویس به درستی راه‌اندازی شده است. با این حال بهترین روش برای تست کردن عملکرد این وب‌سرور، ارسال درخواست به Nginx است.

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

curl ifconfig.io

زمانی که IP سرورتان را پیدا کردید، در مرورگر آدرس زیر را وارد کنید:

http://ABRAK_IP

در پاسخ باید صفحه‌ی پیش‌فرض Nginx به شما نمایش داده شود:

اگر این صفحه را ببینید، یعنی  وب‌سرور Nginx روی ابرک شما به‌درستی در حال اجراست.

گام چهارم: مدیریت Processهای وب‌سرور Nginx

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

برای متوقف کردن وب سرور خود، دستور زیر را وارد کنید:

sudo systemctl stop nginx

برای راه اندازی وب سرور در صورت توقف، دستور زیر را وارد کنید:
sudo systemctl start nginx

برای توقف و سپس شروع مجدد (ری‌استارت) سرویس، دستور زیر را وارد کنید:
sudo systemctl restart nginx

اگر فقط تغییراتی در پیکربندی انجام داده‌اید، Nginx اغلب می تواند بدون قطع اتصالات، بارگیری مجدد کند. برای انجام این کار، از دستور زیر استفاده کنید:
sudo systemctl reload nginx

به شکل پیش‌فرض، Nginx طوری پیکربندی شده است که هنگام بوت شدن ابرک، به‌طور خودکار شروع به کار کند. اگر این چیزی نیست که شما می خواهید، می توانید این رفتار را با وارد کردن دستور زیر غیرفعال کنید:
sudo systemctl disable nginx

برای فعال کردن مجدد سرویس جهت راه اندازی در هنگام بوت، دستور زیر را وارد کنید:
sudo systemctl enable nginx

اکنون دستورات اولیه برای مدیریت Nginx را بررسی کردیم و می‌توانید پیکربندی سایت برای میزبانی بیش از یک دامنه را انجام دهید.

گام پنجم: راه‌اندازی Server Block

هنگام استفاده از وب سرور Nginx، Server Blockها (مشابه میزبان های مجازی یا Virtual Hosts در آپاچی) می توانند برای پیکربندی و میزبانی بیش از یک دامنه در یک سرور استفاده شوند. در این راهنما دامنه ای به نام your_domain راه اندازی خواهیم کرد که شما باید آن را با نام دامنه‌ی خود جایگزین کنید.

Nginx در Ubuntu 20.04 دارای یک Server Block است که به طور پیش فرض فعال شده و برای ارایه‌ی محتوا در دایرکتوری var/www/html/ پیکربندی شده است. در حالی که این حالت برای یک وب‌سایت به خوبی کار می کند، اگر چندین سایت را میزبانی کنید، این پیکربندی نیازتان را رفع نمی‌کند. به جای تغییر var/www/html/، یک ساختار دایرکتوری در var/www/ برای سایت your_domain ایجاد می‌کنیم. var/www/html/ را به عنوان دایرکتوری پیش‌فرض باقی می‌گذاریم تا در صورت عدم مطابقت درخواست کاربر با سایت‌های دیگر، محتوای آن نمایش داده شود.

یک دایرکتوری برای your_domain به شکل زیر ایجاد کنید (استفاده از فلگ p- برای ایجاد دایرکتوری‌های parent ضروری استفاده می‌شود):

sudo mkdir -p /var/www/your_domain/html

سپس، مالکیت دایرکتوری را با متغیر محیطی USER$ تعیین کنید:
sudo chown -R $USER:$USER /var/www/your_domain/html

برای اطمینان از صحیح بودن مجوزها و اجازه به مالک برای خواندن، نوشتن و اجرای فایل ها، می توانید دستور زیر را اجرا کنید:
sudo chmod -R 755 /var/www/your_domain

سپس، یک صفحه‌ی نمونه index.html با استفاده از nano یا ویرایشگر مورد علاقه خود ایجاد کنید:
sudo nano /var/www/your_domain/html/index.html

داخل آن، نمونه HTML زیر را اضافه کنید:

با فشار دادن Ctrl+X، فایل را ذخیره کرده و ببندید، سپس Y و سپس Enter را فشار دهید.

برای اینکه Nginx بتواند این محتوا را ارایه دهد، لازم است یک  Server Blockبا دستورالعمل های صحیح ایجاد کنید. به جای اینکه به شکل مستقیم فایل پیکربندی پیش‌فرض را تغییر دهیم، یک فایل جدید در /etc/nginx/sites-available/your_domain ایجاد می‌کنیم:

sudo nano /etc/nginx/sites-available/your_domain

بلوک پیکربندی زیر، که شبیه به بلوک پیش‌فرض است، اما برای directory و نام دامنه جدید ما اصلاح شده است، را وارد کنید:

توجه داشته باشید ما root را با دایرکتوری جدید و server_name را با نام دامنه تنظیم کردیم.

اکنون باید این فایل را با ایجاد لینک به sites-enabled که Nginx آن را هنگام راه‌اندازی می‌خواند، فعال کنیم:

/sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled

توجه: Nginx از یک روش معمول به نام پیوندهای نمادین یا symlink برای ردیابی اینکه کدام یک از بلاک‌های سرور شما فعال هستند استفاده می کند. ایجاد یک پیوند نمادین، مانند ایجاد یک میانبر بر روی دیسک است، به طوری که می‌توانید میانبر را از فهرست sites-enabled حذف کنید اما در sites-available نگه دارید تا هر زمان خواستید آن را فعال کنید.

اکنون دو Server Block برای پاسخ به درخواست‌ها بر اساس دستعورالعمل‌های listen و server_name فعال و پیکربندی شده‌اند:

  • your_domain: به درخواست‌های your_domain و your_domain پاسخ می‌دهد.
  • default: به هر درخواستی روی پورت 80 که با بلاک‌سرورهای دیگر مطابقت نداشته باشد پاسخ می‌دهد.

برای جلوگیری از مشکل احتمالی که ممکن است در اثر افزودن نام سرورهای اضافی ایجاد شود، لازم است یک مقدار واحد را در فایل /etc/nginx/nginx.conf تنظیم کنید. فایل را باز کنید:

sudo nano /etc/nginx/nginx.conf

مقدار  server_names_hash_bucket_size را پیدا کنید و علامت # این را از ابتدای این خط حذف کنید تا از حالت comment خارج شود.

فایل را بعد از تغییرات بسته و ذخیره کنید.

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

sudo nginx -t

اگر مشکلی وجود نداشت، برای اعمال تغییرات، Nginx را ری‌استارت کنید:

sudo systemctl restart nginx

Nginx اکنون باید دامنه شما را نمایش دهد. می توانید با رفتن به http://your_domain این مورد را  بررسی کنید. در صورتی که مراحل را بدون خطا انجام داده باشید تصویر زیر را مشاهده خواهید کرد:

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

اکنون که با شیوه‌ی نصب و مدیریت Nginx آشنا شدید، توصیه می‌شود با دایرکتوری‌ها و فایل‌های مهم این سرویس نیز آشنا شوید:

محتوا

  • /var/www/html: محتوای وب، که به شکل پیش‌فرض فقط شامل صفحه‌ی پیش‌فرض Nginx است که پیش‌ تر آن را دیدید ، از این دایرکتوری دریافت می‌شود.

پیکربندی سرور

  • /etc/nginx: دایرکتوری پیکربندی Nginx. همه فایل های پیکربندی Nginx در اینجا قرار دارند.
  • /etc/nginx/nginx.conf: فایل پیکربندی اصلی Nginx. این فایل را می توان برای ایجاد تغییرات در پیکربندی global در Nginx اصلاح کرد.
  • /etc/nginx/sites-available/: دایرکتوری‌ای که می‌توان بلوک‌های سرور هر سایت را در آن ذخیره کرد. Nginx از فایل های پیکربندی موجود در این دایرکتوری استفاده نمی‌کند مگر اینکه به دایرکتوری sites-enabled لینک داده شده باشند. به طور معمول، تمام پیکربندی Server Block در این دایرکتوری انجام می شود و سپس با لینک دادن به دایرکتوری دیگر فعال می شود.
  • /etc/nginx/sites-enabled/: دایرکتوری‌ای که در آن بلوک‌های سرور فعال در هر سایت ذخیره می‌شوند.

گزارش‌های سرور

  • var/log/nginx/access.log/: هر درخواست به وب‌سرور شما در این فایل ثبت می‌شود، مگر اینکه Nginx به گونه‌ای دیگر پیکربندی شده باشد.
  • var/log/nginx/error.log/: هر گونه خطای Nginx در این فایل ثبت می شود.

جمع‌بندی

اکنون که وب سرور خود را راه‌اندازی کرده اید، برای ایجاد یک تجربه غنی‌تر گزینه های زیادی برای نوع محتوا و فناوری هایی که می خواهید استفاده کنید، دارید.

برای راه‌اندازی HTTPS برای نام دامنه خود با یک گواهی رایگان SSL با استفاده از Let’s Encrypt، می‌توانید راهنمای گواهی‌نامه‌ی آروان را بررسی کنید.