تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

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


۱۸ اسفند ۱۴۰۳

همه ما در برخی از مواقع با مشکلات سرور یا سایت روبه شده‌ایم. قطعا این سوال پیش می‌آید که چگونه می‌توانیم بفهمیم که تمامی این مشکلات از کجا شروع می‌شود و کدام بخش باعث بروز اختلال شده‌ است. شناخت این دو می‌تواند به شما این امکان را بدهد تا سریع‌تر و بهتر آن را رفع کنید. در این مطلب از لیارا قصد داریم تا روش‌ها و ابزارهایی را به شما معرفی کنیم که می‌تواند به‌‎راحتی مشکلات رایج سرور و سایت شما را شناسایی کند. این اطلاعات نه تنها زمان شما را صرفه جویی می‌کند، بلکه به شما کمک می‌کند تا سایت تان همیشه به بهترین شکل ممکن به روند خود ادامه دهد.

آنچه در ادامه خواهید خواند:

  • مشکلات رایج سایت چیست؟
  • آیا وب‌سرور نصب شده است؟
  • آیا وب‌سرور شما اجرا شده است؟
  • آیا Document Root به محل درست فایل‌ها اشاره می‌کند؟
  • آیا دسترسی و مالکیت فایل‌ها درست تنظیم شده است؟
  • آیا تنظیمات وب‌سرور دسترسی را محدود کرده است؟
  • آیا دیتابیس شما اجرا شده است؟
  • آیا سایت شما به دیتا بیس متصل می‌شود؟
  • جمع بندی

مشکلات رایج سایت چیست؟

بیشتر مشکلاتی که هنگام راه‌اندازی سایت رخ می‌دهند، در دسته‌های مشخصی قرار می‌گیرند. در ادامه یک چک‌لیست برای بررسی مشکلات رایج را شرح داده‌ایم.

  • آیا وب‌سرور نصب شده است؟
  • آیا وب‌سرور در حال اجرا است؟
  • آیا تنظیمات فایل‌های پیکربندی وب‌سرور صحیح است؟
  • آیا پورت‌های لازم باز هستند، فایروال آن‌ها را غیر فعال نکرده است؟
  • آیا تنظیمات DNS به درستی انجام شده است؟
  • آیا مسیر Document Root به محل صحیح فایل‌های سایت اشاره دارد؟
  • آیا وب‌سرور فایل‌های ایندکس صحیح را سرو می‌کند؟
  • آیا سطح دسترسی فایل‌ها و پوشه‌ها به درستی تنظیم شده است؟
  • آیا محدودیت‌های دسترسی در تنظیمات وب‌سرور اعمال شده است؟
  • اگر سایت شما از دیتابیس استفاده می‌کند، آیا دیتابیس اجرا شده است؟
  • آیا سایت می‌تواند به دیتابیس متصل شود؟

برای پیدا کردن مشکل، می‌توانید از لاگ‌های مربوطه استفاده کنید و همچنین پیام‌های خطای نمایش داده‌شده در مرورگر را بررسی کنید.

بررسی لاگ‌ها

قبل از اینکه بی‌هدف به دنبال مشکل بگردید، لاگ‌های مربوط به وب‌سرور و سرویس‌های مرتبط را با دقت بررسی کنید. این فایل‌ها معمولاً در مسیر /var/log/ قرار دارند.

برای مثال، اگر از Apache بر روی سرور Ubuntu استفاده می‌کنید، لاگ‌ها در مسیر زیر ذخیره می‌شوند.

/var/log/apache2/

اگر مشکل از دیتابیس باشد، احتمالاً لاگ‌های مربوطه در /var/log/ قابل مشاهده خواهند بود. همچنین پیام‌های خطایی که هنگام اجرای سرویس‌ها نمایش داده می‌شوند، می‌توانند سرنخ‌های مفیدی برای شما باشند.

آیا وب‌سرور نصب شده است؟

اولین قدمی که باید برای رفع آن بردارید بررسی اینکه وب سرور روی سرور شما نصب شده‌است یا خیر. در برخی از مورد امکان دارد وب سرور هنگام اجرای عملیات‌های دیگر به اشتباه عملیات‌های دیگر را حذف کند. در برخی موارد، ممکن است وب‌سرور هنگام اجرای عملیات‌های دیگر به اشتباه حذف شده باشد.

برای مثال، در سیستم‌های مبتنی بر Debian/Ubuntu، می‌توانید با این دستور بررسی کنید که Apache شما نصب شده است یا خیر.

dpkg -l | grep apache

و در سیستم‌های CentOS/RHEL می‌توانید با دستور زیر بررسی کنید.

rpm -qa | grep httpd

اگر وب‌سرور نصب نشده بود، می‌توانید آن را مجدداً نصب کنید و بعد از آن دوباره بررسی کنید.

نصب و بررسی اجرای وب‌سرور در لینوکس

در Ubuntu/Debianنیاز به نصب Apache را دارید، برای نصب دستور زیر را وارد کنید.

sudo apt-get update
sudo apt-get install apache2

در این سیستم‌ها، فرآیند Apache با نام apache2 اجرا می‌شود.

اگر به‌جای Apache قصد دارید Nginx را نصب کنید، باید دستور زیر را وارد کنید.

sudo apt-get update
sudo apt-get install nginx

در این سیستم‌ها، فرآیند Nginx با نام nginx شناخته می‌شود.

نصب Apache یا Nginx در RHEL، Rocky Linux و Fedora

در این سیستم‌ها، فرآیند Nginx با نام nginx شناخته می‌شود.

برای نصب Apache در RHEL , Rocky Linux , Fedora از این دستور استفاده کنید.

sudo dnf install httpd

در این سیستم‌ها، فرآیند Apache با نام httpd اجرا می‌شود.

قصد دارید که Nginx را بر روی این سیستم‌ها نصب کنید، دستور زیر را وارد کنید.

sudo dnf install nginx

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

سرور مجازی لینوکس

آیا وب‌سرور شما اجرا شده است؟

بعد از نصب، مهم‌ترین کاری که باید انجام دهید این است که باید بررسی کنید آیا وب‌سرور شما در حال اجرا است یا خیر؟؟

یکی از روش‌های رایجی که برای بررسی سرویس‌های فعال از آن استفاده می‌شود، دستور netstat است. این دستور تمام فرآیندهایی که از پورت‌های سرور استفاده می‌کنند را نمایش می‌دهد. برای این کار از دستور زیر استفاده کنید.

netstat -plunt

اگر می‌خواهید خروجی را فقط برای یک سرویس خاص (مثلاً Apache یا Nginx) ببینید، می‌توانید از grep استفاده کنید.

netstat -plunt | grep apache2  # Apache در Ubuntu/Debian  
netstat -plunt | grep nginx    # Nginx
netstat -plunt | grep httpd    # Apache در RHEL و Fedora  

این دستور نشان می‌دهد که آیا وب‌سرور شما در حال اجرا است یا خیر. اگر در خروجی چیزی نمایش داده نشده باشد، به این معنی است که سرویس اجرا نشده و باید آن را به‌صورت دستی راه‌اندازی کنید.

sudo netstat -plunt | grep nginx
Outputtcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      15686/nginx: master
tcp6       0      0 :::80                   :::*                    LISTEN      15686/nginx: master

بررسی وضعیت اجرای وب‌سرور و صحت تنظیمات آن

شما می‌توانید نام nginx را در دستور netstat با نام فرآیند وب‌سرور خود جایگزین کنید.

اگر خروجی‌ای زیر را دریافت و مشاهده کردید، یعنی وب‌سرور شما در حال اجراست. اما اگر هیچ خروجی نداشتید، احتمالاً یا نام فرآیند را اشتباه وارد کرده‌اید یا اینکه وب‌سرور شما اجرا نشده است.

راه‌ اندازی وب‌ سرور در صورت غیر فعال بودن

اگر وب‌سرور شما اجرا نشده باشد، می‌توانید آن را با استفاده از systemd که در اکثر توزیع‌های لینوکس برای مدیریت سرویس‌ها استفاده می‌شود، راه‌اندازی کنید.

برای راه‌اندازی Nginx از این دستور استفاده کنید.

sudo systemctl start nginx

بعد از اجرا، می‌توانید دوباره با netstat بررسی کنید که آیا وب‌سرور فعال شده است یا نه.

بررسی صحت تنظیمات فایل‌ های کانفیگ وب‌ سرور

اگر وب‌سرور شما اجرا نشده باشد، احتمالا مشکل اصلی در تنظیمات آن رخ داده‌ است. وب‌سرورهای Apache و Nginx قوانین دقیقی برای نحوه نوشتن تنظیمات خود دارند و کوچک‌ترین خطا می‌تواند مانع اجرا شدن آن‌ها شود.

مکان فایل‌ های تنظیمات وب‌ سرور

معمولاً تنظیمات سرویس‌های سیستمی، در پوشه /etc/ ذخیره می‌شوند. هر سرویس، یک پوشه مخصوص به خودش را در این مسیر دارد که فایل‌های مربوط به تنظیمات آن داخل آن قرار گرفته‌اند.

🔹 برای Apache در Ubuntu/Debian:

cd /etc/apache2

🔹 برای Apache در RHEL، Rocky Linux و Fedora:

cd /etc/httpd

این تنظیمات ممکن است در چند فایل مختلف ذخیره شده باشد. اگر یک سرویس هنگام اجرا با خطا مواجه شود، معمولاً لاگ‌ها محل دقیق مشکل را نشان می‌دهند و به شما کمک می‌کنند تا سریع‌تر آن را برطرف کنید.

بررسی خطاهای نحوی در فایل‌های کانفیگ

هر وب‌سرور یک ابزار داخلی دارد که به شما کمک می‌کند تا تمامی تنظیمات آن را بررسی کنید و مطمئن شوید که مشکلی در پیکربندی وجود نداشته باشد.

apache2ctl configtest   # Ubuntu/Debian
apachectl configtest    # RHEL

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

apache2ctl configtest
OutputAH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

بررسی صحت تنظیمات و باز بودن پورت‌ها در وب‌سرور

اگر بعد از اجرای دستور بررسی تنظیمات، پیام “Syntax OK” را دیدید، یعنی هیچ خطای جدی در فایل‌های تنظیمات وجود ندارد و وب‌سرور می‌تواند اجرا شود. اما ممکن است با هشدارهایی مانند هشدار زیر روبه رو شوید.

“Could not reliably determine the server’s fully qualified domain name”

این پیام در Apache به این معنی است که سرور هنوز یک نام دامنه مشخص ندارد. با این حال، همچنان می‌توانید از طریق آدرس IP به آن دسترسی داشته باشید و سرور بدون مشکل اجرا خواهد شد.

برای بررسی فایل‌های تنظیمات در Apache:

sudo apache2ctl configtest  # Ubuntu/Debian
sudo apachectl configtest   # RHEL/Fedora

برای بررسی فایل‌های تنظیمات در Nginx:

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

نمونه خطا در Nginx:


اگر به‌عنوان مثال، در فایل /etc/nginx/nginx.conf یک semicolon (;) را فراموش کنید، امکان دارد با خطای زیر روبه رو شوید.

nginx: [emerg] invalid number of arguments in "tcp_nopush" directive in /etc/nginx/nginx.conf:18
nginx: configuration file /etc/nginx/nginx.conf test failed

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

بررسی باز بودن پورت‌های وب‌سرور

به‌طور پیش فرض:

  • پورت 80 برای HTTP
  • پورت 443 برای HTTPS (با SSL/TLS) استفاده می‌شود.

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

بررسی باز بودن پورت سرور از طریق netcat:

nc -zv [آدرس IP سرور] 80
nc -zv [آدرس IP سرور] 443

اگر این پورت‌ها باز باشند، شما یک پیام "successful connection" را دریافت خواهید کرد، در غیر این صورت، باید تنظیمات فایروال را بررسی کنید تا مطمئن شوید که این پورت‌ها مسدود نباشند.

nc -z 111.111.111.111 80

بررسی تنظیمات فایروال و DNS در وب‌سرور

برای اینکع از باز بودن پورت 80 HTTP و 443 HTTPS، از دستور netcat استفاده کنید.

nc -zv 111.111.111.111 80

اگر این پورت باز باشد، دستور بلافاصله به پایان می‌رسد. در غیر این صورت، تلاش برای اتصال ناموفق خواهد بود. می‌توانید این فرایند را با فشردن CTRL+C متوقف کنید.

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

بررسی تنظیمات DNS

اگر سایت شما با آدرس IP در دسترس است، اما از طریق نام دامنه باز نمی‌شود، احتمالاً مشکل از تنظیمات DNS است.

بررسی رکورد A برای IPv4:

host -t A example.com
example.com has address 93.184.216.119

اگر آدرس نمایش داده‌شده با آدرس IP سرور شما مطابقت نداشته باشد، باید رکوردهای DNS را تصحیح کنید.

بررسی رکورد AAAA برای IPv6:

host -t AAAA example.com
example.com has IPv6 address 2606:2800:220:6d:26bf:1447:1097:aa7

📌 نکته: تغییرات DNS ممکن است تا ۳۰ دقیقه یا بیشتر طول بکشد تا اعمال شود. می‌توانید از whatsmydns.net برای بررسی انتشار تغییرات استفاده کنید.

بررسی تنظیمات وب‌سرور برای دامنه

اگر تنظیمات DNS درست است اما سایت همچنان مشکل دارد، فایل‌های پیکربندی وب‌سرور را بررسی کنید.

تنظیمات در Apache (فایل Virtual Host):

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/html
</VirtualHost>

این پیکربندی مشخص می‌کند که Apache درخواست‌های مربوط به example.com را روی پورت 80 مدیریت کند.

تنظیمات در Nginx (فایل Server Block):

/etc/nginx/sites-enabled/default
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    root /usr/share/nginx/html;
    index index.html index.htm;
    server_name example.com www.example.com;
}

✅ ابتدا مطمئن شوید که تنظیمات به درستی انجام شده‌اند، سپس وب‌سرور را یک‌بار ریستارت کنید تا تغییرات اعمال شوند.

sudo systemctl restart apache2  # Apache
sudo systemctl restart nginx    # Nginx
تنظیمات در Nginx

👈🏻بیشتر بخوانید: آموزش نصب و پیکربندی Nginx با Let’s Encrypt در Debian 12 برای امنیت وب‌سایت

آیا Document Root به محل درست فایل‌ها اشاره می‌کند؟

وب‌سرور باید به درستی به پوشه‌ای که فایل‌های سایت در آن قرار دارند، متصل شود. اگر این مسیر اشتباه تنظیم شده باشد، ممکن است هنگام باز کردن سایت با خطای “File Not Found” (فایل یافت نشد) یا “403 Forbidden” (دسترسی غیرمجاز) مواجه شوید.

🔹 در Apache:

/etc/apache2/sites-enabled/default
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/html
</VirtualHost>

این مقدار تعیین می‌کند که Apache باید فایل‌های دامنه را از مسیر /var/www/html بخواند. اگر فایل‌های شما در مسیر دیگری هستند، مقدار DocumentRoot را تغییر دهید.

🔹 در Nginx:

/etc/nginx/sites-enabled/default
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    root /usr/share/nginx/html;
    index index.html index.htm;
    server_name example.com www.example.com;
}

در این تنظیمات، Nginx فایل‌ها را از مسیر /usr/share/nginx/html لود می‌کند. اگر مسیر فایل‌های شما متفاوت است، مقدار root را تغییر دهید.

بعد از تغییر مسیر، وب‌سرور را ری‌استارت کنید.

sudo systemctl restart apache2  # Apache
sudo systemctl restart nginx    # Nginx

بررسی تنظیمات فایل‌های ایندکس

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

🔹 در Apache:

/etc/apache2/sites-enabled/default
<Directory /var/www/html>
    DirectoryIndex index.html index.php
</Directory>

در این قسمت تعیین شده که Apache ابتدا به دنبال index.html می‌گردد و اگر آن را پیدا نکند، index.php را بارگذاری می‌کند. اگر فایل اصلی سایت شما نام دیگری دارد، باید آن را در این بخش اضافه کنید تا وب‌سرور بتواند به درستی آن را اجرا کند.

🔹 در Nginx:

/etc/nginx/sites-enabled/default
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    root /usr/share/nginx/html;
    index index.html index.htm;
    server_name example.com www.example.com;
}

در این قسمت Nginx ابتدا index.html و سپس index.htm را بررسی می‌کند.

در صورت نیاز، فایل index.php را نیز اضافه کنید.

بعد از ویرایش، تنظیمات را بررسی کنید و سرور را ری‌استارت کنید.

sudo apache2ctl configtest   # Apache
sudo nginx -t                # Nginx
sudo systemctl restart apache2  # Apache
sudo systemctl restart nginx    # Nginx

💡 نتیجه: اگر سایت شما باز نمی‌شود، مسیر DocumentRoot و فایل‌های ایندکس را بررسی کنید تا سرور بتواند صفحه‌ی اصلی را به درستی نمایش دهد.

آیا دسترسی و مالکیت فایل‌ها درست تنظیم شده است؟

وب‌سرور باید بتواند فایل‌های سایت را بخواند و به پوشه‌های مربوطه دسترسی داشته باشد. در سرور مجازی لینوکس، این موارد از طریق دسترسی فایل‌ها (permissions) و مالکیت (ownership) تنظیم می‌شود.

🔹 کاربران سرویس‌های وب‌سرور در لینوکس:

  • در Ubuntu / Debian:
  • Apache و Nginx تحت کاربر www-data اجرا می‌شوند که عضو گروه www-data است.
  • در RHEL / Rocky / Fedora:
    • Apache تحت کاربر apache و گروه apache اجرا می‌شود.
    • Nginx تحت کاربر nginx و گروه nginx اجرا می‌شود.

بررسی دسترسی و مالکیت فایل‌ها

ls -l /path/to/web/root

تغییر مالکیت فایل یا پوشه

sudo chown user_owner:group_owner /path/to/file

تغییر مالکیت یک پوشه و همه فایل‌های داخل آن

sudo chown -R user_owner:group_owner /path/to/directory

آیا تنظیمات وب‌سرور دسترسی را محدود کرده است؟

گاهی اوقات تنظیمات Apache یا Nginx به شکلی تنظیم شده‌اند که دسترسی به برخی پوشه‌ها را محدود یا مسدود می‌کنند. این می‌تواند باعث نمایش خطاهایی مانند 403 Forbidden شود. اگر به یک پوشه خاص نیاز دارید، باید تنظیمات مربوط به دسترسی آن را بررسی و اصلاح کنید.

در Apache (نسخه 2.4+):

/etc/apache2/sites-enabled/default
<Directory /usr/share>
    AllowOverride None
    Require all denied
</Directory>

در Nginx:

/etc/nginx/sites-enabled/default
location /usr/share {
    deny all;
}
بررسی اجرای سرویس دیتابیس

🔶شایده به دنبال این آموزش باشید: آموزش تنظیم لاگ و rotation در Nginx در سرور مجازی لینوکس

آیا دیتابیس شما اجرا شده است؟

اگر سایت شما به MySQL , PostgreSQL , MongoDB یا دیتابیس دیگری وابسته است، باید مطمئن شوید که سرویس آن فعال است یا خیر.

بررسی اجرای سرویس دیتابیس (مثلاً MySQL):

sudo netstat -plunt | grep mysql

نمونه خروجی اجرای صحیح سرور.

tcp        0      0 127.0.0.1:3306        0.0.0.0:*         LISTEN      3356/mysqld

اگر سرویس اجرا نمی‌شود، می‌توانید آن را استارت کنید.

sudo systemctl start mysql

📌 توجه: پورت پیش‌فرض MySQL , ۳۳۰۶است. اگر سرویس روی پورت دیگری اجرا شده باشد، باید تنظیمات آن را بررسی کنید.

اگر سایت شما در دسترس نیست:

  • بررسی کنید که فایل‌ها و پوشه‌ها دسترسی مناسب را دارند.
  • مطمئن شوید که تنظیمات سرور (Apache/Nginx) دسترسی را محدود نکرده باشد.
  • چک کنید که سرویس دیتابیس اجرا شده و روی پورت مناسب باشد.

آیا سایت شما به دیتا بیس متصل می‌شود؟

اگر مشکلی در اتصال به دیتا بیس دارید، اولین قدمی که باید بردارید این است باید بررسی کنی که آیا سایت شما به درستی به دیتا بیس متصل شده است یا خیر؟
برای اینکار باید فایل‌های تنظیمات سایت را بررسی کنید که اطلاعات مربوط به دیتابیس در آن‌ها ذخیره شده است.

برای مثال، در WordPress، اطلاعات اتصال به دیتابیس در فایل wp-config.php ذخیره می‌شود. باید مقادیر DB_NAME DB_USER , DB_PASSWORD را بررسی کنید تا مطمئن شوید که درست هستند و سایت شما می‌تواند به دیتابیس وصل شود.

آزمون دستی اتصال به دیتابیس:

برای بررسی صحت اطلاعات، می‌توانید به صورت دستی با استفاده از خط فرمان به دیتابیس متصل شوید. مثلاً در MySQL:

mysql -u DB_USER_value -pDB_PASSWORD_value DB_NAME_value

اگر نتوانید با این مقادیر به دیتابیس متصل شوید، احتمالاً باید دسترسی‌های دیتابیس‌تان را اصلاح کنید.

نتیجه‌گیری

با دنبال کردن این مراحل، امیدواریم توانسته باشید مشکلات رایج اتصال به دیتابیس را پیدا کرده و آن‌ها را حل کنید. بررسی تنظیمات، خطاها ولاگ‌ها به شما کمک می‌کند تا سریع‌تر مشکل را شناسایی کرده و بتوانید عملکرد سایت را بهتر کنید. همچنین با آگاهی از این روش‌ها می‌توانید از بروز مشکلات مشابه در آینده جلوگیری کنید. همیشه بروز نگه داشتن تنظیمات و بررسی منظم سرور می‌تواند به شما در حفظ پایداری و کارایی سایت کمک کند.

برچسب‌ها: