
Nginx یک وبسرور متنباز و قدرتمند است که به دلیل عملکرد بالا، مقیاسپذیری و مصرف کم منابع، به یکی از محبوبترین ابزارها در میان توسعهدهندگان و مدیران سیستم تبدیل شده است. این سرویس نه تنها بهعنوان یک وبسرور برای ارائه محتوای استاتیک و داینامیک استفاده میشود، بلکه بهعنوان یک پروکسی معکوس و متعادلکننده بار (Load Balancer) نیز کاربرد دارد. در حوزه خدمات دواپس، Nginx به دلیل قابلیتهای انعطافپذیر و پیکربندی ساده، نقش مهمی در استقرار و مدیریت برنامههای کاربردی ایفا میکند. با این حال، مانند هر نرمافزار دیگری، Nginx نیز ممکن است با خطاهایی مواجه شود که یکی از رایجترین آنها خطای “Failed with result: exit-code” است. این خطا معمولاً به مشکلات پیکربندی، وابستگیهای سیستمی یا خطاهای اجرایی اشاره دارد. در این مقاله، به بررسی این خطا، علل وقوع آن و راهحلهای ممکن خواهیم پرداخت.
بررسی خطای exit-code
خطای “Failed with result: exit-code” در Nginx معمولاً زمانی رخ میدهد که سرویس Nginx به دلیل مشکلی در اجرا یا پیکربندی متوقف میشود و فرآیند آن با یک کد خروج (exit code) غیرصفر به پایان میرسد. این خطا اغلب در لاگهای سیستمی مانند `systemd` (با دستور `journalctl -u nginx`) یا فایلهای لاگ Nginx قابلمشاهده است. در ادامه، علل رایج این خطا و راهحلهای آن توضیح داده شده است:
علل رایج خطای exit-code
۱. خطای پیکربندی (Configuration Errors):
– فایل پیکربندی Nginx (معمولاً در `/etc/nginx/nginx.conf` یا فایلهای مرتبط) ممکن است دارای سینتکس نادرست یا تنظیمات نامعتبر باشد.
– مثال: تعریف نادرست بلاکهای `server` یا `location`، پورتهای در حال استفاده توسط سرویس دیگر، یا مسیرهای ناموجود برای لاگها.
۲. مشکلات مجوز فایل (File Permissions):
– Nginx به دسترسی مناسب به فایلهای پیکربندی، لاگها (مانند `/var/log/nginx`) یا دایرکتوریهای محتوای وب نیاز دارد. اگر کاربر Nginx (معمولاً `nginx` یا `www-data`) مجوز کافی نداشته باشد، سرویس متوقف میشود.
۳. پورتهای اشغالشده:
– اگر پورت موردنظر (مانند ۸۰ یا ۴۴۳) توسط سرویس دیگری استفاده شود، Nginx نمیتواند راهاندازی شود و خطای exit-code تولید میکند.
۴. وابستگیهای سیستمی:
– فقدان کتابخانههای موردنیاز یا مشکلات در ماژولهای Nginx (مانند ماژولهای SSL یا PHP) میتواند باعث خرابی سرویس شود.
۵. مشکلات حافظه یا منابع سیستمی:
– کمبود حافظه یا محدودیتهای سیستمی (مانند تعداد فایلهای باز) میتواند مانع اجرای صحیح Nginx شود.
راهحلها
۱. بررسی فایل پیکربندی:
– با دستور `nginx -t` سینتکس فایلهای پیکربندی را بررسی کنید. این دستور خطاهای سینتکسی و مشکلات احتمالی را نشان میدهد.
– در صورت وجود خطا، فایل پیکربندی را اصلاح کنید.
۲. بررسی لاگها:
– لاگهای Nginx (مانند `/var/log/nginx/error.log`) و لاگهای سیستمی (`journalctl -xe` یا `journalctl -u nginx`) را بررسی کنید تا جزئیات خطا مشخص شود.
۳. رفع مشکلات مجوز:
– مطمئن شوید که کاربر Nginx به دایرکتوریهای لازم دسترسی دارد. برای مثال:
chown -R nginx:nginx /var/log/nginx
chmod -R 755 /var/log/nginx
۴. بررسی پورتها:
– با دستور `netstat -tulnp` یا `ss -tuln` پورتهای در حال استفاده را بررسی کنید. اگر پورت ۸۰ یا ۴۴۳ اشغال است، سرویس متخلف را متوقف کنید یا پورت Nginx را تغییر دهید.
۵. نصب وابستگیها:
– اطمینان حاصل کنید که تمام ماژولها و کتابخانههای موردنیاز نصب شدهاند. برای مثال، برای ماژول SSL، بسته `openssl` باید نصب باشد.
۶. افزایش منابع سیستمی:
– محدودیتهای سیستمی مانند `ulimit` را بررسی کنید و در صورت نیاز افزایش دهید:
ulimit -n 65535
– همچنین، حافظه و CPU سیستم را بررسی کنید.
مثال عملی
فرض کنید پس از اجرای `systemctl start nginx` با خطای زیر مواجه شوید:
Job for nginx.service failed because the control process exited with error code.
۱. ابتدا پیکربندی را بررسی کنید:
nginx -t
خروجی ممکن است چیزی شبیه این باشد:
nginx: [emerg] unknown directive “invalid_directive” in /etc/nginx/nginx.conf:10
در این حالت، خطای سینتکسی در خط ۱۰ فایل `nginx.conf` وجود دارد.
۲. لاگها را بررسی کنید:
journalctl -u nginx
ممکن است خطایی مانند “bind() to 0.0.0.0:80 failed (98: Address already in use)” ظاهر شود، که نشاندهنده اشغال پورت ۸۰ است.
۳. پورت را آزاد کنید:
fuser -k 80/tcp
systemctl restart nginx
نتیجهگیری
خطای exit-code در Nginx معمولاً به مشکلات پیکربندی، مجوزها، یا منابع سیستمی مربوط است. با بررسی دقیق لاگها، تست پیکربندی، و رفع مشکلات سیستمی، میتوان این خطا را بهسرعت برطرف کرد. استفاده از ابزارهای مانیتورینگ و نگهداری منظم سرور نیز میتواند از بروز چنین خطاهایی در آینده جلوگیری کند.




