Nginx یکی از محبوبترین وبسرورها در جهان است و بیش از 33% وبسایتهای جهان را پشتیبانی میکند. این وبسرور سبک، با کارایی بالا، به خوبی بهعنوان وبسرور و پراکسی معکوس عمل میکند و میزبان برخی از پرترافیکترین سایتهاست. این راهنمای جامع نصب و پیکربندی Nginx روی Ubuntu 22.04، 24.04 و 25.04 را شامل میشود و شامل تنظیم فایروال، سختسازی امنیتی، بهینهسازی عملکرد و رفع عیبهای رایج است.
پیشنیازها
قبل از شروع این راهنما باید:
- یک حساب کاربری ParminCloud داشته باشید و از طریق یک کاربر غیر-root وارد سرور شوید.
- در ParminCloud میتوانید تنظیم دامنه خود را انجام دهید.
هنگامی که حساب در دسترس است، با کاربر غیر-root وارد سرور شوید تا کار را آغاز کنید.
نصب Nginx
Nginx در مخازن پیشفرض اوبونتو برای نسخههای پشتیبانیشده موجود است. آن را با سیستم بستهبندی apt نصب میکنیم تا آخرین نسخه پایدار دریافت شود.
ابتدا فهرست بستههای محلی را بهروز کنید تا از دسترسی به جدیدترین لیست بستهها اطمینان حاصل کنید:
sudo apt update
سپس Nginx را نصب کنید:
sudo apt install nginx
هنگام درخواست برای تأیید نصب، Y را فشار دهید. اگر از شما خواسته شد تا سرویسی را راهاندازی مجدد کنید، ENTER را فشار دهید تا ادامه یابد. apt Nginx و تمام وابستگیهای لازم را نصب خواهد کرد.
برای مشاهده نسخه نصبشده Nginx:
nginx -v
بررسی نصب
برای تأیید اینکه Nginx به درستی نصب شده است، وضعیت سرویس را بررسی کنید:
sudo systemctl status nginx
اگر خروجی نشان داد سرویس فعال است، نصب موفق بوده است.
پیکربندی فایروال (UFW)
قبل از تست Nginx، نیاز است نرمافزار فایروال را بهگونهای پیکربندی کنید که دسترسی به سرویس را ممکن سازد. Nginx پس از نصب خود را بهعنوان یک سرویس در ufw ثبت میکند که اجازه میدهد بهراحتی دسترسی Nginx را فعال کنید.
برای فهرست کردن پیکربندیهای اپلیکیشنی که ufw میتواند با آنها کار کند، تایپ کنید:
sudo ufw app list
شما باید لیستی از پروفایلهای برنامه را مشاهده کنید که شامل پروفایلهای Nginx است.
سه پروفایل برای Nginx موجود است:
- Nginx Full
- Nginx HTTP
- Nginx HTTPS
توصیه میشود که محدودکنندهترین پروفایلی که هنوز ترافیک مورد نیاز شما را میپذیرد فعال کنید. در حال حاضر فقط نیاز به اجازه ترافیک روی پورت 80 داریم.
بهاینترتیب میتوانید HTTP را فعال کنید:
sudo ufw allow 'Nginx HTTP'
همچنین توجه داشته باشید که باید اجازهٔ اتصال OpenSSH را هم فعال کنید تا دسترسی از طریق کنسول وب یا SSH حفظ شود:
sudo ufw allow OpenSSH
میتوانید تغییر را با دستور زیر تأیید کنید:
sudo ufw status
خروجی نشان میدهد که ترافیک HTTP مجاز است و همچنین OpenSSH مجاز است.
تست Nginx
در پایان فرایند نصب، Ubuntu بهصورت پیشفرض Nginx را راهاندازی میکند. وبسرور باید در حال اجرا باشد.
با سیستم init systemd میتوانیم بررسی کنیم سرویس در حال اجراست:
sudo systemctl status nginx
بهترین روش تست واقعی درخواست یک صفحه از Nginx است.
برای مشاهده صفحهٔ پیشفرض Nginx کافیست آدرس IP سرور خود را در مرورگر وارد کنید. اگر آدرس IP خود را نمیدانید، میتوانید از ابزار icanhazip.com برای یافتن آدرس عمومی خود استفاده کنید:
curl http://icanhazip.com
هنگامی که آدرس IP سرور را دارید، آن را در نوار آدرس مرورگر وارد کنید. باید صفحهٔ پیشفرض 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
تنظیم سرور بلوکها (Server Blocks)
هنگامی که از Nginx استفاده میکنید، server blockها (مشابه virtual hosts در آپاچی) میتوانند برای کپسوله کردن تنظیمات و میزبانی چندین دامنه از یک سرور استفاده شوند. در اینجا از دامنهٔ نمونه your_domain استفاده میکنیم؛ شما باید آن را با نام دامنهٔ خود جایگزین کنید.
Nginx روی Ubuntu یک server block پیشفرض فعال دارد که محتوا را از دایرکتوری /var/www/html سرو میکند. برای میزبانی چند سایت بهتر است ساختار دایرکتوری را در /var/www برای دامنهٔ خود ایجاد کنیم و /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
اگر umask خود را تغییر ندادهاید، مجوزهای روت وبسایت شما باید صحیح باشند. برای اطمینان از اینکه مالک میتواند بخواند، نوشتن و اجرا داشته باشد و گروه و دیگران تنها خواندن و اجرا داشته باشند، دستور زیر را اجرا کنید:
sudo chmod -R 755 /var/www/your_domain
یک فایل نمونه index.html با ویرایشگر مورد علاقهتان ایجاد کنید:
nano /var/www/your_domain/html/index.html
داخل آن HTML نمونه زیر را اضافه کنید و سپس ذخیره و ببندید:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Welcome to your_domain!</title>
</head>
<body>
<h1>Success! The your_domain server block is working!</h1>
</body>
</html>
برای اینکه Nginx این محتوا را سرو کند، لازم است که یک server block با دستورات مناسب ایجاد کنیم. بهجای تغییر فایل پیکربندی پیشفرض، یک فایل جدید در /etc/nginx/sites-available/your_domain بسازید:
sudo nano /etc/nginx/sites-available/your_domain
بلوک پیکربندی زیر را درون فایل قرار دهید (مشابه پیشفرض اما با root و server_name بهروزرسانی شده):
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 به دامنهٔ شما بهروزرسانی شده است.
برای فعالسازی این فایل، یک پیوند نمادین (symlink) از آن به sites-enabled ایجاد کنید، که Nginx هنگام راهاندازی آن را میخواند:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
نکته: Nginx از رویهٔ معمولی استفاده میکند که با symlinkها مشخص میشود که کدام server blockها فعال هستند. ایجاد یک symlink مثل ساختن یک میانبر روی دیسک است، بنابراین میتوانید بعداً میانبر را از sites-enabled حذف کنید بدون اینکه فایل اصلی در sites-available حذف شود.
دو server block حالا فعال هستند و بر اساس دستورات listen و server_name به درخواستها پاسخ میدهند.
تنظیم server_names_hash_bucket_size
برای جلوگیری از مشکل احتمالی hash bucket memory که میتواند از افزودن server nameهای بیشتر ایجاد شود، لازم است یک مقدار در /etc/nginx/nginx.conf را تغییر دهیم. فایل را باز کنید:
sudo nano /etc/nginx/nginx.conf
دنبال server_names_hash_bucket_size بگردید و علامت # را حذف کنید تا خط از حالت کامنت خارج شود. اگر از nano استفاده میکنید، با CTRL+W میتوانید جستجو کنید.
فایل را ذخیره و ببندید.
سپس برای اطمینان از عدم وجود خطاهای نحوی در فایلهای Nginx، تست زیر را اجرا کنید:
sudo nginx -t
اگر خطایی وجود ندارد، Nginx را مجدداً راهاندازی کنید تا تغییرات اعمال شوند:
sudo systemctl restart nginx
حالا Nginx باید دامنهٔ شما را سرو کند. میتوانید با مراجعه به http://your_domain آن را تست کنید که باید صفحهٔ نمونهٔ شما نمایش داده شود.
سختسازی امنیت و بهینهسازی عملکرد
قبل از پرداختن به مدیریت فایلها، بیایید نصب Nginx را برای محیط تولید ایمن و بهینه کنیم.
فایل پیکربندی اصلی Nginx را ویرایش کنید:
sudo nano /etc/nginx/nginx.conf
در بلاک http، این دستورات امنیتی را اضافه کنید:
# Security directives (examples)
server_tokens off;
client_max_body_size 8m;
این موارد نمونه هستند. بر اساس نیازهای امنیتی خود تنظیمات مناسب را اضافه کنید.
برای بهبود عملکرد، این تنظیمات را در /etc/nginx/nginx.conf اضافه کنید:
# Performance optimizations (examples)
worker_processes auto;
worker_connections 1024;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
پیکربندی را تست کنید:
sudo nginx -t
اگر تست پاس شد، Nginx را بارگذاری مجدد کنید:
sudo systemctl reload nginx
برای نصب گواهی SSL آمادهسازی کنید.
مدیریت فایلها و ساختار
اکنون که با مدیریت سرویس آشنا هستید، بهتر است با چند دایرکتوری و فایل مهم آشنا شوید.
بهترین روشهای امنیتی برای سختسازی Nginx
چند بهترین روش امنیتی را دنبال کنید تا نصب Nginx خود را محکم کنید:
- بهروزرسانی مرتب بستهها
- محدود کردن دسترسیها و مالکیت فایلها
- فعالسازی فایروال و اختصاص قوانین مناسب
- اضافه کردن هدرهای امنیتی
هدرهای زیر را به server block خود اضافه کنید تا امنیت افزایش یابد:
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
برای محدود کردن نرخ درخواستها، این پیکربندی را به server block اضافه کنید:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
...
location / {
limit_req zone=one burst=5;
...
}
}
مدیریت سرویس با systemctl
از دستورات systemctl برای مدیریت سرویس Nginx استفاده کنید:
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl enable nginx
sudo systemctl disable nginx
برای بررسی وضعیت Nginx از این دستورات استفاده کنید:
sudo systemctl status nginx
sudo journalctl -u nginx
پروفایلهای UFW برای Nginx
UFW سه پروفایل Nginx برای سطوح امنیتی مختلف فراهم میکند:
- Nginx Full (HTTP و HTTPS)
- Nginx HTTP (فقط پورت 80)
- Nginx HTTPS (فقط پورت 443)
فایلها و مسیرهای مهم
فایل پیکربندی اصلی در /etc/nginx/nginx.conf قرار دارد. پیکربندیهای مربوط به سایتها در پوشههای زیر نگهداری میشوند:
- /etc/nginx/sites-available/
- /etc/nginx/sites-enabled/
یک server block را در /etc/nginx/sites-available/your-domain پیکربندی کنید و سپس آن را با یک symlink به sites-enabled فعال نمایید.
رفع عیبهای رایج
مراحل معمول برای عیبیابی را بررسی کنید:
- بررسی خطاهای نحوی:
sudo nginx -t - بررسی لاگها:
/var/log/nginx/error.logو/var/log/nginx/access.log - اطمینان از فعال بودن پورتها در فایروال
- بررسی رکوردهای DNS و تطابق IP با سرور
جمعبندی
حالا یک وبسرور Nginx روی Ubuntu 22.04، 24.04، یا 25.04 نصب و پیکربندی شده است. در این راهنما فرایند کامل راهاندازی Nginx از نصب اولیه روی مخازن رسمی اوبونتو تا سختسازی امنیتی و بهینهسازی عملکرد مرور شد. شما نحوهٔ پیکربندی فایروال با UFW برای امنسازی وبسرور را یاد گرفتید، مدیریت سرویس Nginx با systemd را آموختید و server blockها را برای میزبانی چند دامنه پیکربندی کردید. همچنین آشنایی لازم برای راهاندازی پراکسی معکوس، متعادلسازی بار و رفع عیب از طریق تحلیل لاگها را کسب کردید.
درک تفاوتهای نسخهای میان انتشارهای اوبونتو به شما کمک میکند تصمیمات بهتری دربارهٔ محیط استقرار خود بگیرید. با تواناییها و بهینهسازیهای Nginx میتوانید وبسایتها، پراکسی معکوس، متعادلسازی بار و اپلیکیشنهای پرترافیک را میزبانی کنید. اقدامات امنیتی و تنظیمات عملکردی که پوشش دادیم، تضمین میکنند وبسرور شما پایدار، ایمن و کارا در محیط تولید باقی بماند.
از اینکه با پارمینکلود همراهید سپاسگزاریم.




نظرات کاربران