اگر یک سرور مجازی Ubuntu تهیه کردهاید و میخواهید سایت، لندینگ پیج، فایلهای استاتیک یا یک اپلیکیشن وب را روی آن اجرا کنید، یکی از اولین ابزارهایی که احتمالاً به آن نیاز خواهید داشت Nginx است.
Nginx یک وبسرور سبک و قدرتمند است که علاوه بر سرو کردن فایلهای سایت، میتواند بهعنوان Reverse Proxy، Load Balancer و HTTP Cache نیز استفاده شود.
در این آموزش از صفر شروع میکنیم: Nginx را روی Ubuntu نصب میکنیم، وضعیت سرویس را بررسی میکنیم، دسترسی HTTP را در فایروال باز میکنیم، برای یک دامنه Server Block میسازیم و در نهایت سایت را از طریق مرورگر آزمایش میکنیم.
نکته: در مثالهای این مقاله از دامنه
example.comاستفاده شده است. هنگام انجام مراحل باید آن را با دامنه واقعی خودتان جایگزین کنید.
Nginx چیست و چرا از آن استفاده میکنیم؟
Nginx یکی از محبوبترین وبسرورهای دنیاست و به دلیل عملکرد بالا و مصرف بهینه منابع، انتخابی بسیار رایج برای سرورهای لینوکسی و بهخصوص VPS به شمار میرود.
معماری Nginx بر پایه رویداد (Event-Driven) طراحی شده است؛ به همین دلیل میتواند تعداد زیادی اتصال همزمان را با مصرف معقول RAM و CPU مدیریت کند.
برخی کاربردهای مهم Nginx عبارتاند از:
میزبانی سایتهای استاتیک (HTML, CSS, JS)
هدایت ترافیک به اپلیکیشنهایی مانند Node.js، Python یا Go (به عنوان Reverse Proxy)
اتصال به PHP-FPM برای اجرای سایتهای PHP مانند WordPress
مدیریت SSL/TLS و امنسازی ترافیک HTTPS
توزیع بار بین چند سرور (Load Balancing)
قبل از نصب Nginx چه چیزهایی نیاز داریم؟
برای دنبال کردن این آموزش بهتر است موارد زیر آماده باشند:
یک سرور یا VPS با سیستمعامل Ubuntu
یک کاربر با دسترسی
sudo(یا دسترسیroot)دسترسی SSH به سرور
در صورت تمایل، یک دامنه که DNS آن به IP سرور اشاره کند
اگر بهتازگی سرور خریداری کردهاید و هنوز اقدامات اولیه امنیت را انجام ندادهاید، پیشنهاد میکنیم مقاله چکلیست راهاندازی و امنیت VPS را نیز مطالعه کنید.
مرحله اول: بهروزرسانی فهرست پکیجها
قبل از نصب هر نرمافزار جدیدی روی سرور، فهرست مخازن Ubuntu را بهروز کنید:
sudo apt update
در صورت تمایل میتوانید پکیجهای موجود را نیز ارتقا دهید:
sudo apt upgrade -y
این کار کمک میکند نسخههای پایدار و بهروز از مخزن دریافت شوند.
مرحله دوم: نصب Nginx در Ubuntu
Nginx در مخازن پیشفرض Ubuntu وجود دارد و بهراحتی با APT نصب میشود:
sudo apt install nginx -y
پس از پایان فرآیند نصب، نسخه Nginx را بررسی کنید:
nginx -v
خروجی نسخهای مشابه زیر خواهد بود:
nginx version: nginx/1.18.0 (Ubuntu)
شماره نسخه ممکن است بسته به نسخه Ubuntu شما متفاوت باشد.
مرحله سوم: بررسی وضعیت سرویس Nginx
پس از نصب، سرویس Nginx معمولاً بهصورت خودکار اجرا میشود.
برای بررسی وضعیت آن:
sudo systemctl status nginx
اگر همهچیز درست باشد، عبارت زیر را مشاهده خواهید کرد:
Active: active (running)
برای خارج شدن از محیط نمایش وضعیت، کلید زیر را فشار دهید:
q
اگر به هر دلیلی سرویس اجرا نشده بود:
sudo systemctl start nginx
و برای اینکه مطمئن شوید Nginx پس از روشن شدن مجدد سرور نیز بالا میآید:
sudo systemctl enable nginx
مرحله چهارم: تنظیم فایروال UFW برای Nginx
اگر روی سرور خود از فایروال UFW استفاده میکنید، باید پورتهای وب را باز کنید تا مرورگر بتواند با سرور ارتباط برقرار کند.
ابتدا پروفایلهای موجود در UFW را ببینید:
sudo ufw app list
معمولاً این سه مورد را مشاهده میکنید:
Nginx HTTP(پورت 80)Nginx HTTPS(پورت 443)Nginx Full(هم پورت 80 و هم 443)
اگر فعلاً قصد دارید با HTTP ساده تست کنید:
sudo ufw allow 'Nginx HTTP'
اگر قصد دارید بعداً SSL فعال کنید (که توصیه میشود):
sudo ufw allow 'Nginx Full'
سپس وضعیت فایروال را بررسی کنید:
sudo ufw status
هشدار: اگر فایروال را فعال میکنید، حتماً مطمئن شوید پورت SSH باز باشد تا دسترسیتان به سرور قطع نشود. برای جزئیات بیشتر مقاله آموزش فایروال UFW در اوبونتو را بخوانید.
مرحله پنجم: تست اولیه Nginx در مرورگر
حالا وقت آن است که عملکرد وبسرور را بررسی کنید.
مرورگر خود را باز کنید و آدرس IP عمومی سرور را وارد کنید:
http://YOUR_SERVER_IP
اگر IP سرور خود را نمیدانید، با دستور زیر در سرور میتوانید آن را پیدا کنید:
curl -4 icanhazip.com
یا:
ip addr show
پس از باز کردن IP در مرورگر، باید صفحه پیشفرض Welcome to nginx! را مشاهده کنید. این یعنی وبسرور آماده کار است.
مرحله ششم: آشنایی با ساختار فایلهای Nginx
قبل از ساخت سایت اختصاصی، بهتر است ساختار مسیرهای اصلی Nginx در Ubuntu را بشناسیم:
مسیر تنظیمات اصلی
/etc/nginx/
فایل تنظیمات عمومی Nginx در مسیر زیر است:
/etc/nginx/nginx.conf
پوشه sites-available
/etc/nginx/sites-available/
در این پوشه فایل کانفیگ مربوط به هر سایت (Server Block) را میسازیم. فایلهای داخل این پوشه بهتنهایی فعال نیستند.
پوشه sites-enabled
/etc/nginx/sites-enabled/
فایلهایی که در این پوشه لینک میشوند، سایتهای فعال Nginx هستند. وبسرور هنگام اجرا محتوای این پوشه را میخواند.
مسیر پیشفرض فایلهای وب
/var/www/html/
صفحه پیشفرض Nginx در این مسیر قرار دارد. برای سایتهای اختصاصی معمولاً پوشه جداگانهای در /var/www/ میسازیم.
لاگهای Nginx
/var/log/nginx/access.log
/var/log/nginx/error.log
لاگ دسترسیها و خطاها در این فایلها ذخیره میشوند.
مرحله هفتم: ایجاد مسیر اختصاصی برای فایلهای سایت
بهجای قرار دادن همهچیز در پوشه پیشفرض، بهتر است برای هر سایت یک پوشه جدا بسازید.
فرض کنید دامنه ما example.com است:
sudo mkdir -p /var/www/example.com/html
سپس مالکیت این پوشه را به کاربری فعلی بدهید تا بتوانید فایلها را بدون sudo ویرایش کنید:
sudo chown -R $USER:$USER /var/www/example.com/html
و سطح دسترسی مناسب را اعمال کنید:
sudo chmod -R 755 /var/www/example.com
مرحله هشتم: ساخت یک صفحه HTML آزمایشی
یک فایل index.html ساده داخل پوشه سایت بسازید:
nano /var/www/example.com/html/index.html
محتوای زیر را داخل آن قرار دهید:
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>سایت آزمایشی روی Nginx</title>
<style>
body {
font-family: Tahoma, sans-serif;
text-align: center;
padding: 50px;
background: #f4f4f9;
color: #333;
}
h1 { color: #059669; }
</style>
</head>
<body>
<h1>Nginx با موفقیت روی سرور Ubuntu راهاندازی شد!</h1>
<p>این صفحه از مسیر /var/www/example.com/html سرو میشود.</p>
</body>
</html>
فایل را ذخیره کنید و خارج شوید:
Ctrl + O
Enter
Ctrl + X
مرحله نهم: ساخت Server Block اختصاصی در Nginx
Server Block در Nginx معادل همان Virtual Host در Apache است و به شما اجازه میدهد چندین سایت مختلف را روی یک سرور میزبانی کنید.
یک فایل جدید در sites-available ایجاد کنید:
sudo nano /etc/nginx/sites-available/example.com
تنظیمات زیر را داخل آن بنویسید:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
سپس فایل را ذخیره کنید.
این تنظیمات چه کاری انجام میدهند؟
خط زیر Nginx را روی پورت HTTP قرار میدهد:
listen 80;
برای IPv6 نیز:
listen [::]:80;
دامنههایی که این Server Block باید پاسخ دهد:
server_name example.com www.example.com;
مسیر فایلهای سایت:
root /var/www/example.com/html;
فایل پیشفرض صفحه اصلی:
index index.html index.htm;
و:
try_files $uri $uri/ =404;
باعث میشود Nginx ابتدا فایل یا پوشه درخواستشده را پیدا کند و اگر وجود نداشت پاسخ 404 بدهد.
مرحله دهم: فعال کردن سایت در Nginx
تا اینجا فایل در sites-available قرار دارد، اما باید آن را فعال کنیم.
یک Symbolic Link ایجاد کنید:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
برای مشاهده سایتهای فعال:
ls -l /etc/nginx/sites-enabled/
باید لینکی به فایل example.com مشاهده کنید.
اگر هنگام ساخت لینک پیام
File existsدریافت کردید، احتمالاً لینک از قبل ساخته شده است. قبل از حذف یا ساخت مجدد، محتوایsites-enabledرا بررسی کنید.
مرحله یازدهم: تست تنظیمات Nginx قبل از Reload
این مرحله را حذف نکنید.
قبل از Reload یا Restart کردن Nginx، Syntax تنظیمات را بررسی کنید:
sudo nginx -t
اگر Configuration صحیح باشد، معمولاً خروجی مشابه زیر خواهید دید:
syntax is ok
test is successful
اگر خطایی وجود داشته باشد، Nginx معمولاً نام فایل و شماره خط تقریبی مشکل را نمایش میدهد.
ابتدا خطا را برطرف کنید و دوباره اجرا کنید:
sudo nginx -t
تنها زمانی که تست موفق بود، تنظیمات را Reload کنید:
sudo systemctl reload nginx
استفاده از reload برای اعمال بسیاری از تغییرات Configuration مناسب است و لازم نیست برای هر تغییر سرویس را کاملاً Restart کنید.
مرحله دوازدهم: اتصال دامنه به IP سرور
برای اینکه کاربران بهجای IP، دامنه را باز کنند، DNS دامنه باید به VPS اشاره کند.
بهطور معمول یک رکورد A برای دامنه اصلی ایجاد میشود:
Type: A
Name: @
Value: SERVER_IP
برای www نیز میتوانید رکورد مناسب ایجاد کنید.
برای مثال:
Type: A
Name: www
Value: SERVER_IP
یا بسته به ساختار DNS خود از CNAME استفاده کنید.
بعد از اعمال تغییرات DNS ممکن است مدتی طول بکشد تا Resolverهای مختلف اطلاعات جدید را دریافت کنند.
برای راهنمای کامل این مرحله و فعالسازی HTTPS، مقاله آموزش اتصال دامنه به سرور مجازی؛ تنظیم DNS و HTTPS را بخوانید.
چگونه بررسی کنیم دامنه به IP درست وصل شده است؟
میتوانید از دستور dig استفاده کنید:
dig +short example.com
یا:
nslookup example.com
اگر IP نمایشدادهشده همان IP VPS باشد، DNS دامنه حداقل از Resolver مورد استفاده شما به مقصد موردنظر اشاره میکند.
همچنین میتوانید درخواست HTTP ارسال کنید:
curl -I http://example.com
آیا باید سایت پیشفرض Nginx را حذف کنیم؟
بعد از فعال شدن Server Block دامنه، ممکن است بخواهید سایت پیشفرض Nginx را غیرفعال کنید.
ابتدا وضعیت فایلها را بررسی کنید:
ls -l /etc/nginx/sites-enabled/
اگر لینک default وجود دارد و به آن نیاز ندارید، میتوانید فقط لینک فعال آن را حذف کنید:
sudo rm /etc/nginx/sites-enabled/default
سپس:
sudo nginx -t
و در صورت موفق بودن تست:
sudo systemctl reload nginx
حذف فایل اصلی از sites-available معمولاً ضرورتی ندارد.
دستورات پرکاربرد مدیریت Nginx
مشاهده وضعیت سرویس:
sudo systemctl status nginx
اجرای Nginx:
sudo systemctl start nginx
متوقف کردن سرویس:
sudo systemctl stop nginx
Restart:
sudo systemctl restart nginx
Reload تنظیمات:
sudo systemctl reload nginx
بررسی Syntax:
sudo nginx -t
مشاهده نسخه:
nginx -v
مشاهده سایتهای فعال:
ls -l /etc/nginx/sites-enabled/
تفاوت Reload و Restart در Nginx چیست؟
این دو دستور شبیه هم به نظر میرسند اما کاربردشان کاملاً یکسان نیست.
Reload
sudo systemctl reload nginx
برای بارگذاری مجدد Configuration استفاده میشود.
در بسیاری از تغییرات کانفیگ، این گزینه انتخاب مناسبی است.
Restart
sudo systemctl restart nginx
سرویس را متوقف و دوباره اجرا میکند.
اگر فقط فایل Server Block را تغییر دادهاید، معمولاً بعد از:
sudo nginx -t
یک reload کافی است.
مشاهده Access Log سایت
Nginx درخواستهای دریافتی را در لاگ ثبت میکند.
برای مشاهده آخرین درخواستها:
sudo tail -n 50 /var/log/nginx/access.log
برای مشاهده زنده:
sudo tail -f /var/log/nginx/access.log
حالا اگر سایت را در مرورگر Refresh کنید، باید درخواستهای جدید را در Terminal ببینید.
برای خروج:
Ctrl + C
مشاهده Error Log در Nginx
هنگام خطا یکی از اولین جاهایی که باید بررسی کنید:
/var/log/nginx/error.log
برای مشاهده آخرین خطاها:
sudo tail -n 100 /var/log/nginx/error.log
یا مشاهده زنده:
sudo tail -f /var/log/nginx/error.log
این فایل برای پیدا کردن مشکلات Permission، فایلهای گمشده، خطاهای Upstream و بسیاری از مشکلات دیگر مفید است.
رفع خطای 403 Forbidden در Nginx
خطای 403 Forbidden میتواند دلایل مختلفی داشته باشد.
ابتدا بررسی کنید فایل اصلی سایت وجود دارد:
ls -la /var/www/example.com/html/
باید فایل index.html یا فایل Index مورد انتظار شما وجود داشته باشد.
سپس مسیر root را در Server Block بررسی کنید:
root /var/www/example.com/html;
Permission فایلها و پوشهها را نیز بررسی کنید.
برای عیبیابی دقیقتر Error Log را ببینید:
sudo tail -n 100 /var/log/nginx/error.log
استفاده از دستورهایی مثل:
chmod -R 777
صرفاً برای «حل سریع» Permission توصیه نمیشود و میتواند امنیت سرور را کاهش دهد.
رفع خطای 404 Not Found
اگر صفحه اصلی باز میشود اما یک فایل خاص 404 میدهد، ابتدا بررسی کنید آن فایل واقعاً در Web Root وجود دارد.
برای مثال:
ls -la /var/www/example.com/html/
همچنین Configuration زیر را بررسی کنید:
location / {
try_files $uri $uri/ =404;
}
این تنظیم برای یک سایت استاتیک طبیعی است، اما اگر بعداً فریمورک یا اپلیکیشن خاصی نصب کنید ممکن است Routeها نیاز به تنظیم متفاوتی داشته باشند.
رفع خطای nginx: configuration file test failed
اگر دستور زیر:
sudo nginx -t
خطا داد، Nginx معمولاً فایل مشکلدار را مشخص میکند.
برای مثال خطاهایی مثل:
unexpected "}"
میتواند نشاندهنده Brace اضافه یا ساختار اشتباه باشد.
یا خطای:
directive is not terminated by ";"
اغلب به یک ; فراموششده مربوط است.
فایل Server Block را باز کنید:
sudo nano /etc/nginx/sites-available/example.com
خطا را اصلاح و دوباره تست کنید:
sudo nginx -t
تا قبل از موفق شدن این تست، Configuration خراب را Reload نکنید.
رفع خطای Address already in use
اگر Nginx نمیتواند روی پورت 80 اجرا شود، ممکن است سرویس دیگری آن پورت را اشغال کرده باشد.
برای بررسی:
sudo ss -ltnp | grep ':80'
اگر Apache، Nginx دیگری، Container یا سرویس دیگری روی پورت 80 گوش میدهد، باید مشخص کنید کدام سرویس قرار است Web Server اصلی باشد.
بدون بررسی، سرویسهای سیستم را حذف یا متوقف نکنید.
چرا با IP سایت باز میشود اما با دامنه نه؟
اگر سایت با IP باز میشود ولی دامنه کار نمیکند، این موارد را بررسی کنید:
رکورد
Aدامنه به IP صحیح اشاره کند.DNS تغییر کرده و Resolver شما رکورد جدید را دریافت کرده باشد.
مقدار
server_nameدرست باشد.پورت 80 در Firewall باز باشد.
Nginx Configuration بدون خطا Load شده باشد.
برای بررسی Server Block:
sudo nginx -t
برای بررسی DNS:
dig +short example.com
برای تست مستقیم:
curl -I http://example.com
چرا صفحه Welcome to nginx نمایش داده میشود؟
اگر دامنه را باز میکنید اما صفحه پیشفرض Nginx دیده میشود، چند احتمال وجود دارد:
دامنه به IP اشتباه اشاره میکند.
server_nameدامنه شما در Server Block صحیح نیست.سایت جدید در
sites-enabledفعال نشده است.Configuration را Reload نکردهاید.
Server Block پیشفرض درخواست را دریافت میکند.
این دستورات را بررسی کنید:
ls -l /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
و مطمئن شوید داخل فایل سایت نوشتهاید:
server_name example.com www.example.com;
قدم بعدی: فعال کردن HTTPS
تا این مرحله سایت روی HTTP اجرا میشود:
http://example.com
برای یک سایت واقعی بهتر است HTTPS را نیز فعال کنید تا ارتباط مرورگر و سرور رمزنگاری شود.
قبل از صدور گواهی SSL باید دامنه به IP صحیح VPS متصل باشد و وبسرور از اینترنت قابل دسترسی باشد.
مراحل DNS و HTTPS را بهصورت جداگانه در مقاله زیر توضیح دادهایم:
آموزش اتصال دامنه به سرور مجازی؛ تنظیم DNS و HTTPS
چکلیست نهایی راهاندازی Nginx
بعد از پایان کار، این موارد را بررسی کنید:
Nginx نصب شده است.
سرویس Nginx در وضعیت
active (running)قرار دارد.پورت 80 در صورت استفاده از Firewall مجاز است.
پورت SSH همچنان قابل دسترسی است.
Web Root اختصاصی سایت ساخته شده است.
Server Block دامنه ایجاد شده است.
سایت در
sites-enabledفعال شده است.دستور
nginx -tبدون خطا اجرا میشود.Configuration با
reloadاعمال شده است.رکورد DNS به IP صحیح اشاره میکند.
سایت از طریق دامنه باز میشود.
برای محیط Production، HTTPS فعال شده است.
نمونه کامل Server Block یک سایت استاتیک
در پایان، نمونهای که در این آموزش ساختیم به شکل زیر است:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
بعد از هر تغییر:
sudo nginx -t
و در صورت موفق بودن:
sudo systemctl reload nginx
را اجرا کنید.
سوالات متداول
آیا Nginx رایگان است؟
نسخه متنباز Nginx رایگان است و برای راهاندازی انواع وبسایت و سرویس وب استفاده میشود.
آیا میتوان چند سایت را روی یک VPS با Nginx اجرا کرد؟
بله. میتوانید برای هر دامنه یک Server Block جدا ایجاد کنید و چند سایت را روی یک IP میزبانی کنید، به شرط اینکه منابع VPS برای بار کاری شما کافی باشد.
آیا برای Nginx حتماً دامنه لازم است؟
خیر. برای تست اولیه میتوانید Nginx را با IP سرور باز کنید. اما برای یک وبسایت واقعی معمولاً دامنه و HTTPS نیاز خواهید داشت.
آیا Nginx جایگزین PHP یا Node.js است؟
خیر. Nginx یک Web Server و Reverse Proxy است. برای اجرای کد PHP، Node.js، Python و سایر Runtimeها باید سرویس مربوطه نیز روی سرور نصب و پیکربندی شود.
بعد از تغییر فایل Nginx باید Restart کنیم؟
نه همیشه. برای تغییرات Configuration معمولاً ابتدا:
sudo nginx -t
و سپس:
sudo systemctl reload nginx
کافی است.
فایل تنظیمات هر سایت را کجا قرار دهیم؟
در ساختار رایج پکیج Nginx در Ubuntu، میتوانید فایل هر سایت را در:
/etc/nginx/sites-available/
قرار دهید و برای فعال شدن آن، لینک مربوطه را داخل:
/etc/nginx/sites-enabled/
ایجاد کنید.
جمعبندی
راهاندازی Nginx روی Ubuntu یکی از اولین قدمها برای تبدیل یک VPS خام به یک Web Server قابل استفاده است.
فرآیند اصلی شامل چند مرحله است:
نصب Nginx
↓
بررسی سرویس
↓
تنظیم Firewall
↓
ساخت Web Root
↓
ساخت Server Block
↓
nginx -t
↓
Reload
↓
تنظیم DNS
↓
فعالسازی HTTPS
مهمترین عادت هنگام مدیریت Nginx این است که قبل از Reload یا Restart همیشه Configuration را تست کنید:
sudo nginx -t
اگر تست موفق بود:
sudo systemctl reload nginx
بعد از راهاندازی HTTP نیز دامنه را به VPS متصل کرده و HTTPS را فعال کنید.



