Nginx یکی از محبوبترین وبسرورها در جهان است و مسئولیت میزبانی برخی از بزرگترین و پربازدیدترین سایتهای سطح اینترنت را بر عهده دارد. این یک کنترل پنل سبک وزن است که میتواند به عنوان وب سرور یا پروکسی معکوس استفاده شود. در این راهنما، نحوه نصب Nginx بر روی سرور مجازی اوبونتو 22.04، تنظیم فایروال، مدیریت فرآیند Nginx و راهاندازی بلوکهای سرور برای میزبانی بیش از یک دامنه از یک سرور را مورد بحث قرار خواهیم داد.
پیشنیازهای نصب Nginx
پیش از شروع آموزش نصب NginX روی اوبونتو، باید یک کاربر معمولی پیکربندی شده و بدون دسترسی root با دسترسیهای sudo روی سرور مجازی لینوکس خود داشته باشید.
همچنین توصیه میشود پیش از اتمام آخرین مراحل این آموزش یک دامنه ثبت شده، یک سرور مجازی لینوکس یا هاست cPanel داشته باشید. برای کسب اطلاعات بیشتر در رابطه با ثبت دامنه و تنظیم DNSهای آن با پشتیبانی مبین هاست تماس بگیرید.
هنگامی که یک حساب کاربری غیر root ساختید، برای شروع به عنوان همین کاربر وارد سیستم شوید.
مرحله اول:نصب Nginx
از آنجایی که Nginx در مخازن پیشفرض اوبونتو موجود است، میتوان آن را از این مخازن با استفاده از سیستم پکیج apt نصب کرد.
از آنجایی که این اولین تعامل ما با سیستم پکیج apt در این session است، ایندکس بسته محلی (local package index) خود را به روز می کنیم تا به آخرین لیستهای بسته دسترسی داشته باشیم. پس از آن، می توانیم nginx را نصب کنیم:
هنگامی که پیغامی برای تایید نصب به شما نمایش داده شد، کلید Y را فشار دهید. اگر از شما خواسته شد هر سرویسی را ریستارت کنید، کلید ENTER را فشار دهید تا مقادیر پیشفرض را تایید کرده و ادامه دهید. apt کنترل پنل Nginx و هر گونه وابستگی مورد نیاز آن را روی سرور شما نصب می کند.
مرحله دوم: تنظیم فایروال
پیش از تست Nginx، باید نرم افزار فایروال را پیکربندی کنید تا امکان دسترسی به سیستم فراهم شود. Nginx پس از اتمام نصب، خود را بعنوان یک سرویس در ufw ثبت کرده و امکان دسترسی به Nginx را ساده میسازد.
میتوانید پیکربندیهای نرم افزاری را که ufw میداند چگونه با آنها کار کند را به دست آورید:
sudo ufw app list
شما باید لیستی از پروفایلهای برنامهها را به این صورت دریافت کنید:
Output Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH
همانطور که در خروجی نشان داده شده است، سه پروفایل برای Nginx وجود دارد:
Nginx Full: این پروفایل هردو پورتهای ۸۰ (عادی، ترافیک وب رمزنگاری نشده) و پورت ۴۴۳ (ترافیک رمزنگاری شده با TLS/SSL) را باز میکند.
Nginx HTTP: این پروفایل تنها پورت ۸۰ را باز میکند.
Nginx HTTPS: این پروفایل تنها پورت ۴۴۳ را باز میکند (ترافیک رمزگذاری شده TLS/SSL).
توصیه میشود که محدودترین گزینهای که هنوز از ترافیکی که پیکربندی کردهاید پشتیبانی میکند را فعال کنید. در حال حاضر تنها پورتی که نیاز است آن را باز کنیم پورت ۸۰ است.
شما میتوانید این پورت را با تایپ دستور زیر فعال کنید:
sudo ufw allow 'Nginx HTTP'
میتوانید با تایپ دستور زیر، تغییرات اعمال شده را ذخیره کنید:
sudo ufw status
خروجی، ترافیکهای مجاز HTTP را نمایش میدهد:
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
مرحله سوم:بررسی وب سرور
در پایان مراحل نصب، اوبونتو Nginx را راه اندازی میکند. وبسرور باید از قبل راهاندازی شده باشد.
میتوانید با استفاده از دستور systemd، از اجرای سرویس اطمینان حاصل کنیم. برای انجام این کار لازم است دستور زیر را تایپ کنید:
systemctl status nginx
خروجی به صورت زیر خواهد بود:
Output nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2022-03-01 16:08:19 UTC; 3 days ago Docs: man:nginx(8) Main PID: 2369 (nginx) Tasks: 2 (limit: 1153) Memory: 3.5M CGroup: /system.slice/nginx.service ├─2369 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─2380 nginx: worker process
همان طور که در خروجی مشاهده میکنید، این سرویس با موفقیت راه اندازی شده است. با این حال بهترین راه برای این موضوع این است که یک صفحه از خود Nginx درخواست کنید.
شما میتوانید با پیمایش به آدرس IP سرور خود، به صفحه لندینگ پیشفرض Nginx دسترسی پیدا کنید تا صحت اجرای نرم افزار را تایید کنید. اگر آدرس آیپی سرور خود را نمیدانید، میتوانید آن را با استفاده از ابزار icanhazip.com پیدا کنید:
curl -4 icanhazip.com
وقتی آدرس IP سرور خود را شناسایی کردید، آن را در نوار آدرس مرورگر خود وارد کنید:
http://your_server_ip
اکنون باید صفحه پیشفرض Nginx به شما نمایش داده شود.
اگر در این صفحه هستید، سرور شما به درستی در حال اجراست و آماده مدیریت میباشد.
مرحله چهارم – مدیریت فرآیند Nginx
اکنون که وب سرور شما راهاندازی و اجرا شده است، بیایید چند دستور مدیریتی ابتدایی را بررسی کنیم.
برای متوقف کردن وب سرور، دستور زیر را تایپ کنید:
sudo systemctl stop nginx
برای شروع وب سرور زمانی که متوقف شده است، دستور زیر را تایپ کنید:
sudo systemctl start nginx
برای متوقف کردن و سپس شروع دوباره سرویس، دستور زیر را تایپ کنید:
sudo systemctl restart nginx
اگر فقط قصد دارید روی پیکربندی تغییراتی اعمال کنید، معمولاً میتوان Nginx را بدون قطع ارتباطات reload کرد. برای انجام این کار، دستور زیر را تایپ کنید:
sudo systemctl reload nginx
Nginx بطور پیش فرض طوری پیکربندی شده است تا هنگام بوت سرور به طور خودکار شروع بکار کند. اگر نمیخواهید این اتفاق بیفتد، میتوانید با تایپ کردن دستور زیر، این گزینه را غیرفعال کنید:
sudo systemctl disable nginx
برای فعال کردن مجدد سرویس شروع به کار خودکار هنگام بوت سرور، میتوانید دستور زیر را تایپ کنید:
sudo systemctl enable nginx
اکنون که با دستورات مدیریت پایه Nginx آشنا شدید باید آماده پیکربندی سایت برای میزبانی بیش از یک دامنه باشید.
مرحله پنجم – راهاندازی بلوکهای سرور (توصیه میشود)
وقتی از سرور وب Nginx استفاده میکنید، بلوکهای سرور (مشابه میزبانهای مجازی در Apache) میتوانند برای قرار دادن جزئیات پیکربندی و میزبانی بیش از یک دامنه از یک سرور استفاده شوند. ما در این آموزش یک دامنه به نام your_domain را تنظیم میکنیم، اما شما باید آن را با نام دامنه خودتان جایگزین کنید.
Nginx در Ubuntu 22.04 به صورت پیشفرض یک بلوک سرور فعال دارد که به منظور سرویس دادن به اسناد از یک دایرکتوری در var/www/html/ پیکربندی شده است. این روش برای یک سایت به تنهایی کارایی خوبی دارد، اما در صورت میزبانی چندین سایت، ممکن است مناسب نباشد. به جای اینکه var/www/html/ را تغییر دهیم، بهتر است یک ساختار دایرکتوری در داخل var/www/ برای سایت your_domain ایجاد کنیم و var/www/html/ را به عنوان دایرکتوری پیشفرض برای سرویسدهی در صورتی که درخواست کلاینت با هیچ یک از سایتهای دیگر مطابقت نداشته باشد، باقی بگذاریم.
برای ایجاد دایرکتوری your_domain، با استفاده از فلگ p- برای ایجاد دایرکتوریهای ضروری، دستور زیر را اجرا کنید:
sudo mkdir -p /var/www/your_domain/html
بعد، با استفاده از متغیر $USER، مالکیت این دایرکتوری را مشخص کنید:
sudo chown -R $USER:$USER /var/www/your_domain/html
این دستور مالکیت دایرکتوری /var/www/your_domain/ و تمام محتویات آن را به کاربر جاری با استفاده از متغیر $USER تنظیم میکند.
اگر مقدار umask که مقدار پیشفرض مجوز فایلها را تنظیم میکند تغییر نداده باشید، دسترسی دایرکتوری روت وب شما باید درست باشد. برای اطمینان از درستی مجوزها و تنظیم مجوز دسترسی خواندن، نوشتن و اجرای فایلها به کاربر اصلی و دسترسی خواندن و اجرا به گروهها و کاربران دیگر، میتوانید دستور زیر را وارد کنید:
اگر مقدار umask را (که مقدار پیشفرض مجوز فایلها را تنظیم میکند) تغییر ندادهاید، دسترسیهای دایرکتوری روت وب شما باید درست باشد. اما برای اطمینان از درستی دسترسیها و مجوزها و تنظیمات آنها به گونهای که فقط مالک یا کاربر اصلی بتواند دسترسی خواندن، نوشتن و اجرا را به فایلها داشته باشد و سایرین فقط دسترسی خواندن و اجرا کردن داشته باشند، میتوانید دستور زیر را وارد کنید:
sudo chmod -R 755 /var/www/your_domain
این دستور دسترسیهای دایرکتوری /var/www را به 755 تنظیم میکند که به این معنی است که مالک میتواند فایلها را خوانده و نوشته و همچنین آنها را اجرا کند، ولی سایر دسترسیها تنها میتوانند فایلها را بخوانند و اجرا کنند.
سپس، یک صفحه نمونه index.html با استفاده از nano یا ویرایشگر مورد نظر خود ایجاد کنید:
sudo nano /var/www/your_domain/index.html
در این مرحله، یک صفحه HTML ساده بسازید. برای مثال، محتوای زیر را در فایل index.html بنویسید:
<!DOCTYPE html> <html> <head> <title>Welcome to your_domain!</title> </head> <body> <h1>Success! The your_domain server block is working!</h1> </body> </html>
سپس با استفاده کلیدهای Ctrl+X، سپس کلید Y و در نهایت کلید Enter از صفحه کلید، فایل را ذخیره کنید و ویرایشگر را ببندید.
برای اینکه Nginx بتواند این محتوا را ارائه دهد، لازم است یک بلوک سرور با دستورالعملهای درست ایجاد کنیم. به جای اینکه به طور مستقیم فایل پیکربندی پیشفرض را تغییر دهیم، بهتر است یک فایل جدید در /etc/nginx/sites-available/your_domain بسازیم:
sudo nano /etc/nginx/sites-available/your_domain
در این فایل، دستورالعملهای زیر را وارد کنید:
server { listen 80; listen [::]:80; root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html; server_name your_domain www.your_domain; location / { try_files $uri $uri/ =404; } }
توجه داشته باشید که باید پیکربندی root را به دایرکتوری جدید خود و server_name را به نام دامنه خود به روز کنید.
هم برای فعال کردن فایل تنظیمات جدید، باید با ایجاد یک لینک از آن به دایرکتوری sites-enabled که در هنگام راهاندازی Nginx از آن خوانده میشود، آن را فعال کنیم. برای این منظور دستور زیر را وارد کنید:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
توجه: NGINX از یک روش معمول به نام Symlinks برای بررسی این که کدام یک از بلوک های سرور شما فعال هستند استفاده میکند.
میتوانید نام فایل تنظیماتی که ساختید را به نام دلخواه خود تغییر دهید. همچنین در صورتی که نام دامنهی خود را برای سایت میخواهید، باید نام فایل تنظیمات را با نام دامنهی خود تغییر دهید.
دو بلاک سرور حالا فعال شده و پیکربندی شده تا براساس دستورهای listen و server_name به درخواستهای ورودی پاسخ بدهد:
- your_domain : به درخواستهای «your_domain» و «www.your_domain» پاسخ میدهد.
- default : به هر درخواستی که روی پورت 80 ارائه میشود و با دو بلاک دیگر مطابقت ندارد پاسخ میدهد.
برای جلوگیری از مشکل Hash Bucket حافظه که میتواند ناشی از اضافهشدن نامهای سرور اضافی باشد، لازم است یک مقدار واحد در فایل «etc/nginx/nginx.conf/» را تنظیم کنید. فایل را با این دستور باز کنید:
sudo nano /etc/nginx/nginx.conf
دستور «server_names_hash_bucket_size» را پیدا کرده و علامت «#» را حذف کنید تا این خط از حالت کامنت خارج شود. اگر از ویرایشگر nano استفاده میکنید، میتوانید با فشردن دکمههای Ctrl و W خیلی سریع کلمات موردنظرتان را جستوجو کنید.
توجه کنید که برای تبدیل کردن چند خط کد به کامنت، معمولا کاراکتر «#» را در ابتدای خط اضافه میکنند. از این روش برای غیرفعال کردن موقتی کد بدون نیاز به پاک کردن آن استفاده میکنند. بسیاری از فایلهای پیکربندی معمولا دارای چندین گزینه یا حالت مختلف هستند که بهصورت کامنت درآمدهاند تا هر زمان که نیاز داشتید آنها را فعال/غیرفعال کنید.
... http { ... server_names_hash_bucket_size 64; ... } ...
پس از انجام تغییرات فایل را ذخیره کنید و ببندید. حالا باید بررسی کنید که هیچ خطای سینتکس یا دستوری در فایلهای Nginx شما وجود نداشته باشد:
sudo nginx -t
اگر هیچ خطایی وجود نداشت، Nginx را ریستارت کنید تا تغییرات اعمال شود:
sudo systemctl restart nginx
حالا Nginx باید به درخواستهای نام دامنهای که مشخص کردهاید پاسخ بدهد. شما میتوانید صحت این امر را با مراجعه به آدرس «http://your_domain» چک کنید. اگر همهچیز بهخوبی کار کند پیامی مشابه زیر را میبینید:
مرحله ششم: آشنایی با فایلهای مهم و دایرکتوریهای Nginx
حالا که میدانید چطور باید سرویس Nginx را مدیریت کنید، توصیه میکنیم چند دقیقه از وقتتان را به آشنایی بیشتر با دایرکتوریها و فایلهای مهم Nginx اختصاص بدهید.
محتوا یا Content
محتوای اصلی وب که بهصورت پیشفرض فقط صفحه پیشفرض Nginx که بالاتر مشاهده کردید را شامل میشود، در دایرکتوری «/var/www/html» قرار گرفته است. در صورت تمایل میتوانید از طریق فایلهای پیکربندی Nginx این دایرکتوری را تغییر دهید.
پیکربندی سرور یا Server Configuration
«/etc/nginx» : مسیری است که فایل پیکربندی Nginx در آن قرار گرفته است. تمام فایلهای پیکربندی Nginx در این دایرکتوری در دسترس قرار دارند.
«/etc/nginx/nginx.conf» : فایل پیکربندی اصلی Nginx است که برای اعمال تغییرات کلی در Nginx میتوان آن را تنظیم کرد.
«/etc/nginx/sites-available/» : دایرکتوری که بلاکهای سرور بهازای هر سایت در آن ذخیره شده است. Nginx از فایلهای پیکربندی موجود در این دایرکتوری استفاده نمیکند مگر اینکه به دایرکتوری «sites-enabled» لینک شده باشند. معمولا، کل پیکربندی بلاکهای سرور از طریق این دایرکتوری انجام میشود و سپس با لینک شدن به سایر دایرکتوریها، آن را فعال میکنند.
«/etc/nginx/sites-enabled/» : دایرکتوری که محل نگهداری بلاکهای سرور فعالشده است. معمولا، این بلاکها معمولا با لینک شدن به فایلهای پیکربندی موجود در دایرکتوری «sites-available» ساخته میشود.
«/etc/nginx/snippets» : این دایرکتوری بخشهای کوچک (Fragment) مربوط به پیکربندی که میتواند در هر جایی از فایل پیکربندی Nginx باشد را نگهداری میکند. سگمنتهای پیکربندی قابل تکرار معمولا برای بازسازی شدن بهعنوان اسنیپت (Snippet) گزینههای خوبی هستند.
لاگهای سرور یا Server Logs
«/var/log/nginx/access.log» : هر درخواست که به وب سرور شما وارد میشود در این فایل لاگ ثبت میشود، مگر اینکه Nginx بهگونهای پیکربندی شده باشد که این اطلاعات در جای دیگری ذخیره شود.
«/var/log/nginx/error.log» : تمام خطاهای Nginx در این فایل لاگ ذخیره میشود.
جمعبندی
حالا که وب سرور خودتان را نصب کردهاید، برای ارائه محتوای موردنظر و تکنولوژیهایی که برای ارائه تجربه غنیتر استفاده میکنید، آزادیعمل مناسبی دارید.