نحوه نصب Nginx در سرور مجازی اوبونتو Ubuntu
۶ بهمن ۱۴۰۳
مقدمه
Nginx یکی از محبوبترین وبسرورهای جهان است که برخی از بزرگترین و پرترافیکترین سایتهای اینترنتی را میزبانی میکند. این وبسرور سبک، میتواند به عنوان یک سرور ساده یا پروکسی معکوس، مورد استفاده قرار گیرد.
در این راهنما، نحوه نصب Nginx بر روی سرور مجازی اوبونتو، نحوه تنظیم فایروال، نحوه مدیریت فرآیندهای Nginx و نحوه پیکربندی بلاکهای سرور (Server Blocks) برای میزبانی چندین دامنه از یک سرور را، بررسی خواهیم کرد.
پیشنیازها
قبل از شروع این راهنما، باید یک کاربر معمولی غیر روت (non-root) با دسترسی sudo در سرور خود تنظیم کرده باشید. برای یادگیری نحوه تنظیم حساب کاربری معمولی، میتوانید به مقاله نحوه راهاندازی اولیه سرور مجازی با اوبونتو Ubuntu مراجعه کنید. همچنین، بهتر است پیش از تکمیل مراحل پایانی این آموزش، یک نام دامنه ثبت کرده باشید.
در صورتی که با مفاهیم مربوط به سرور مجازی یا VPS آشنایی ندارید؛ توصیه میشود در ابتدا مقالههای زیر را مطالعه بفرمایید:
- سرور مجازی یا VPS چیست؟ انواع و کاربرد
- SSH چیست؟ + نحوه استفاده از SSH برای اتصال به سرور مجازی (VPS)
هنگامی که حساب کاربری مورد نظر خود را تنظیم کردید، به عنوان کاربر غیر روت وارد شوید تا مراحل زیر را انجام دهید:
- مرحله اول: نحوه نصب Nginx
- مرحله دوم: نحوه تنظیم فایروال
- مرحله سوم: بررسی وبسرور
- مرحله چهارم: مدیریت فرایندهای مربوط به Nginx
- مرحله پنجم: تنظیم بلوکهای سرور (اختیاری)
- مرحله ششم: آشنایی بیشتر با فایلها و دایرکتوریهای Nginx
- نتیجهگیری
مرحله اول: نحوه نصب Nginx
از آنجا که Nginx در repositoryهای پیشفرض اوبونتو موجود است، میتوان آن را با استفاده از سیستم پکیجینگ apt، از این repositoryها نصب کرد. در ابتدا فهرست پکیجهای local را بهروزرسانی میکنیم تا به آخرین فهرست پکیجها دسترسی داشته باشیم. سپس میتوانیم Nginx را نصب کنیم:
sudo apt update
sudo apt install nginx
هنگامی که برای تأیید نصب، از شما در ترمینال، درخواست میشود، کلید Y را فشار دهید. اگر از شما خواسته شد خدماتی را مجدداً راهاندازی کنید، کلید ENTER را فشار دهید تا تنظیمات پیشفرض پذیرفته شوند و فرایند، ادامه پیدا کند. دستور apt، ماژول Nginx و هر وابستگی مورد نیاز را روی سرور مجازی شما نصب خواهد کرد.
مرحله دوم: نحوه تنظیم فایروال
قبل از آزمایش Nginx، فایروال باید طوری تنظیم شود که اجازه دسترسی به این سرویس را بدهد. Nginx هنگام نصب، خود را بهعنوان یک سرویس در ufw (فایروال اوبونتو) ثبت میکند، که این امر، اجازه دسترسی به Nginx را ساده میسازد.
برای مشاهده پیکربندیهایی که ufw میتواند با آنها کار کند، این دستور را وارد کنید:
sudo ufw app list
خروجی باید لیستی از پروفایلهای برنامه را نشان دهد:
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
همانطور که خروجی نشان میدهد، سه پروفایل برای 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 مجاز شده است:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
مرحله سوم: بررسی وبسرور
در پایان فرآیند نصب، سرور مجازی اوبونتو به طور خودکار Nginx را اجرا میکند. وب سرور باید هماکنون در حال اجرا باشد. میتوانید با اجرای دستور systemctl اطمینان حاصل کنید که سرویس در حال اجرا است. برای این کار، دستور زیر را وارد کنید:
systemctl status nginx
خروجی:
● 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 است.
برای تأیید اینکه نرمافزار به درستی اجرا میشود، میتوانید به صفحه پیشفرض Nginx دسترسی پیدا کنید. کافی است آدرس IP سرور مجازی خود را در نوار آدرس مرورگر وارد کنید. اگر آدرس IP عمومی سرور خود را نمیدانید، میتوانید از ابزار icanhazip.com استفاده کنید که آدرس IP عمومی شما را بر اساس موقعیت مکانی دیگری، در اینترنت ارائه میدهد:
curl -4 icanhazip.com
پس از دریافت آدرس IP سرور، آن را در نوار آدرس مرورگر وارد کنید:
http://your_server_ip
با وارد شدن به لینک فوق، باید صفحه پیشفرض Nginx را مشاهده کنید:
اگر این صفحه نمایش داده شد، وب سرور شما به درستی اجرا شده و آماده استفاده است.
مرحله چهارم: مدیریت فرایندهای مربوط به Nginx
اکنون که وب سرور شما فعال و در حال اجرا است، میتوانیم برخی دستورات پایه مربوط به Nginx را بررسی کنیم.
برای متوقف کردن وب سرور، دستور زیر را وارد کنید:
sudo systemctl stop nginx
برای شروع وب سرور در صورتی که از قبل به هر دلیلی، متوقفشده است، از دستور زیر استفاده کنید:
sudo systemctl start nginx
برای متوقف کردن و سپس راهاندازی مجدد سرویس، دستور زیر را وارد کنید:
sudo systemctl restart nginx
اگر فقط تغییراتی را در پیکربندی Nginx اعمال کردهاید، میتوانید Nginx را بدون قطع connectionها، مجدداً بارگذاری کنید. برای این کار دستور زیر را وارد کنید:
sudo systemctl reload nginx
به طور پیشفرض، Nginx طوری پیکربندی شده است که هنگام راهاندازی سرور، بهصورت خودکار شروع به کار کند. اگر نمیخواهید این رفتار ادامه یابد، دستور زیر را وارد کنید:
sudo systemctl disable nginx
برای فعال کردن مجدد سرویس، جهت شروع به کار در زمان بوت، دستور زیر را وارد کنید:
sudo systemctl enable nginx
شما اکنون دستورات پایه را یاد گرفتهاید و آماده هستید تا تنظیمات سرور مجازی خود را برای میزبانی بیش از یک دامنه پیکربندی کنید.
مرحله پنجم: تنظیم بلوکهای سرور (اختیاری)
در وبسرور Nginx، بلوکهای سرور (server blockها) مشابه میزبانهای مجازی (virtual hostها) در Apache، برای کپسولهکردن جزئیات پیکربندی و میزبانی بیش از یک دامنه در یک سرور، استفاده میشوند. در اینجا یک دامنه به نام your_domain
تنظیم میکنیم، اما باید آن را با نام دامنه خود جایگزین کنید.
بهطور پیشفرض، Nginx در اوبونتو، بلوک سرور پیشفرضی دارد که برای ارائه دادهها از دایرکتوری /var/www/html
پیکربندی شده است. اما برای مدیریت چندین سایت بهتر است دایرکتوری جدیدی برای دامنه خود ایجاد کنیم. برای این کار دستور زیر را وارد کنید:
sudo mkdir -p /var/www/your_domain/html
سپس مالکیت دایرکتوری را به کاربر فعلی تغییر دهید:
sudo chown -R $USER:$USER /var/www/your_domain/html
مجوزهای شما باید درست تنظیمشده باشد البته در صورتی که مقدار umask
خود را تغییر نداده باشید، که مجوزهای پیشفرض فایل را تنظیم میکند. برای اطمینان از درست بودن مجوزها و اجازه دادن به مالک برای خواندن، نوشتن و اجرای فایلها در حالی که فقط مجوزهای خواندن و اجرای فایل به گروهها و دیگران داده میشود، دستور زیر را وارد کنید:
sudo chmod -R 755 /var/www/your_domain
یک صفحه نمونه index.html
با استفاده از nano یا ویرایشگر دلخواه خود بسازید:
nano /var/www/your_domain/html/index.html
در داخل این فایل، کد 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 از یک روش معمول به نام symbolic links برای ردیابی بلوکهای سرور فعال شده، استفاده میکند. ساخت یک symlink مانند ایجاد میانبر روی دیسک است، به طوری که میتوانید در آینده میانبر را از دایرکتوری sites-enabled
حذف کنید و بلوک سرور را در sites-available
نگه دارید.
در حال حاضر، دو بلاک سرور فعال شدهاند که بر اساس دستورات listen
و server_name
هر درخواست، به آنها پاسخ خواهند داد:
- your_domain: به درخواستهای your_domain و www.your_domain پاسخ میدهد.
- default: به درخواستهای دیگر که با هیچکدام از بلوکهای دیگر تطابق ندارند، پاسخ میدهد.
برای جلوگیری از مشکل احتمالی حافظه hash bucket که ممکن است با افزودن نامهای دامنه اضافی پیش آید، باید یک مقدار را در فایل /etc/nginx/nginx.conf
تغییر دهید. فایل را باز کنید:
sudo nano /etc/nginx/nginx.conf
دستور server_names_hash_bucket_size
را پیدا کنید و علامت #
را از ابتدای خط حذف کنید تا آن را از حالت comment خارج کنید. اگر از nano استفاده میکنید، میتوانید با فشردن CTRL+W
به جستجوی فایل بپردازید.
خطوطی که با #
شروع میشوند، معمولاً به عنوان commented out
در نظر گرفته شده و به عنوان مستندات یا گزینههای غیر فعال عمل میکنند. شما میتوانید این خطوط را برای فعالسازی به حالت کد بازگردانید یا برای غیرفعال کردن دوباره از #
استفاده کنید.
http {
...
server_names_hash_bucket_size 64;
...
}
پس از ویرایش فایل، با فشردن Ctrl+X
آن را ببندید، سپس Y و Enter را برای ذخیره تغییرات فشار دهید. برای اطمینان از اینکه هیچ خطای نحوی در فایلهای Nginx وجود ندارد، دستور زیر را اجرا کنید:
sudo nginx -t
اگر مشکلی وجود نداشت، پیام موفقیتآمیز نمایش داده میشود. برای اعمال تغییرات جدید، Nginx را مجدداً راهاندازی کنید:
sudo systemctl restart nginx
اکنون Nginx باید دامنه شما را سرو کند. شما میتوانید این موضوع را با رفتن به آدرس http://your_domain
آزمایش کنید. در صورت موفقیت، باید صفحهای مشابه صفحه خوشآمدگویی Nginx مشاهده کنید:
مرحله ششم: آشنایی بیشتر با فایلها و دایرکتوریهای Nginx
اکنون که نحوه مدیریت سرویس Nginx را آموختید، بهتر است چند دقیقه زمان صرف کرده و با فایلها و دایرکتوریهای مهم آن آشنا شوید.
محتوا (Content)
/var/www/html
: این مسیر شامل محتوای وبسرور است. به صورت پیشفرض، فقط صفحه پیشفرض Nginx که قبلاً مشاهده کردید، در اینجا وجود دارد. این مسیر میتواند با تغییر فایلهای پیکربندی Nginx، تغییر کند.
پیکربندی سرور (Server Configuration)
/etc/nginx
: دایرکتوری اصلی پیکربندی Nginx. تمامی فایلهای پیکربندی Nginx در این دایرکتوری قرار دارند./etc/nginx/nginx.conf
: فایل اصلی پیکربندی Nginx که برای ایجاد تغییرات در تنظیمات کلی سرور، استفاده میشود./etc/nginx/sites-available/
: دایرکتوری محل ذخیره بلوکهای سرور برای هر سایت. Nginx از فایلهای پیکربندی موجود در این دایرکتوری استفاده نمیکند مگر اینکه به دایرکتوریsites-enabled
لینک شوند. معمولاً تمام تنظیمات مربوط به هر سایت در این مسیر انجام میشود و سپس از طریق لینکدهی به دایرکتوری دیگر، فعال میگردند./etc/nginx/sites-enabled/
: محل ذخیره بلوکهای سرور فعال شده برای هر سایت. معمولاً این فایلها با لینکدهی از دایرکتوری sites-available ایجاد میشوند./etc/nginx/snippets
: این دایرکتوری شامل configuration fragments است که میتواند در سایر فایلهای تنظیمات Nginx درج شود. بخشهای تکراری پیکربندی میتوانند برای refactoring به این دایرکتوری منتقل شوند.
لاگهای سرور (Server Logs)
/var/log/nginx/access.log
: تمامی درخواستها به وبسرور شما در این فایل ثبت میشوند، مگر اینکه Nginx طور دیگری تنظیم شده باشد./var/log/nginx/error.log
: هرگونه خطای مربوط به Nginx، در این فایل ثبت میشود.
نتیجهگیری
اکنون که وب سرور Nginx نصب شده است، میتوانید انواع مختلف محتوا را میزبانی کرده و از فناوریهای متنوعی برای ایجاد تجربهای غنیتر، استفاده کنید.
سرورهای مجازی ابری لیارا یک راهحل انعطافپذیر و مقرون بهصرفه برای کسبوکارها و توسعهدهندگان فراهم میکنند. با استفاده از سرور مجازی ایران میتوانید سرورهای خود را در کمترین زمان ممکن، راهاندازی کنید و از ترافیک نامحدود بهرهمند شوید. برای کسانی که نیاز به سرورهایی با هزینه پایین دارند، سرورهای مجازی ارزان قیمت لیارا گزینههای مناسبی هستند.