چندین روش برای رفع خطا در Nginx وجود دارد که میتوانید از آنها استفاده کنید. به خاطر داشته باشید که این روشهای رفع خطا به عنوان یک نقطه شروع استفاده میشوند و برای تشخیص علت اصلی یک مشکل، اغلب نیاز به بررسی بیشتر میباشد. در حین مطالعه این آموزش، خود خطاها اطلاعات کلیدی را فراهم میکنند که به شما در رسیدن به یک راه حل کمک میکنند.
در این آموزش، دستورات زیر که به طور معمول برای رفع اشکال در Nginx در اکثر توزیعهای لینوکس استفاده میشوند، مورد بررسی قرار خواهند گرفت:
- sudo cat /var/log/nginx/error.log برای بررسی لاگی با لیستی از خطاها و جزئیات درباره آنها استفاده میشود.
- sudo nginx -t برای بررسی خطاهای سینتکسی در فایل کانفیگ استفاده میشود.
- systemctl status nginx برای بررسی وضعیت فعال یا غیرفعال بودن سرویس Nginx استفاده میشود.
در این آموزش، بیشتر درباره این دستورات و نحوه استفاده از آنها برای رفع اشکالات مختلف Nginx آموزش خواهید یافت.
رفع اشکال با استفاده از لاگ خطا
زمانی که یک خطا از Nginx دریافت میکنید، ممکن است همیشه واضح نباشد که مشکل چیست و چرا بوجود آمده است. به همین دلیل، یک خطا ممکن است به یک مشکل بزرگتر یا یک مشکل جداگانه مربوط باشد. این به شرایط خاص شما بستگی دارد و تنظیمات ممکن است متفاوت باشد. برای دریافت یک نمای کامل از خطاهای Nginx، دستور زیر را اجرا کنید تا لیستی از آنها را دریافت کنید:
sudo cat /var/log/nginx/error.log
شما باید این دستور را به عنوان یک کاربر با امتیازات کامل اجرا کنید. توصیه می کنیم به جای کاربر روت، از یک کاربر دارای دارای امتیاز sudo استفاده کنید. دستور cat مخفف concatenate است که برای خواندن محتویات یک فایل و چاپ آن در خروجی ترمینال استفاده می شود. در این حالت، cat در حال خواندن و چاپ محتوای فایل /var/log/nginx/error.log است. هنگامی که این دستور را اجرا می کنید، خروجی شما لیستی از خطاها را برمی گرداند. به خاطر داشته باشید که اگر خطایی وجود نداشته باشد، درخواست شما خالی خواهد ماند. در اینجا نمونه ای از گزارش خطا آورده شده است:
2022/11/28 23:58:22 [emerg] 168641#168641: invalid host in "[::]443" of the "listen" directive in /etc/nginx/sites-enabled/test.do-community.com:12
2022/11/28 23:59:44 [emerg] 168664#168664: invalid number of arguments in "root" directive in /etc/nginx/sites-enabled/test.do-community.com:4
2022/11/29 00:00:19 [emerg] 168701#168701: "server" directive is not allowed here in /etc/nginx/sites-enabled/test.do-community.com:6
این خروجی لاگ اطلاعات کلیدی در مورد خطای خاصی که با آن مواجه می شوید را ارائه می دهد. بخش اول این آیتم گزارش تاریخ و زمان وقوع خطا و نوع پیام خطا را به تفصیل شرح می دهد. در این مورد، این نوع پیام [emerg] یا اضطراری است. بخش نهایی یک لاگ خطا شامل خود پیام خطا و در صورت لزوم، چه فایل و خط خاصی است که می توان آن را پیدا کرد.
به طور کلی، اگر می خواهید اطلاعات بیشتری در مورد خطا(هایی) که ممکن است دریافت کنید، با گزارش خطای Nginx خود مشورت کنید.
بررسی خطاهای سینتکسی
یکی از رایج ترین خطاهای Nginx مربوط به دستورات در فایل پیکربندی شما است. خواه کاراکترهای گم شده باشد یا ساختار دستوری نادرست، اگر سینتکس نادرست باشد، کار نخواهد کرد. و به این دلیل است که فایل پیکربندی شامل دستورالعمل های مختلفی است و باید به درستی اعلام شود، در غیر این صورت نامعتبر خواهند بود. برای بررسی اینکه آیا خطاهای سینتکسی دارید، دستور زیر را اجرا کنید:
sudo nginx -t
این دستور باید توسط یک کاربر با ممتاز کامل اجرا شود، ما یک کاربر با امتیاز sudo را به جای کاربر root توصیه می کنیم. علاوه بر این، نماد t نشان می دهد که این فایل را قبل از اجرای واقعی آزمایش می کند. اگر سینتکس شما درست باشد، خروجی زیر را دریافت خواهید کرد:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
در غیر این صورت، یک پیغام خطایی مشابه نمونه هایی که در مورد لاگ خطا به اشتراک می گذاریم دریافت خواهید کرد. اگر یک خطای سینتکسی وجود داشته باشد، خروجی شما ممکن است بصورت زیر باشد:
[emerg] invalid host in "[::]443" of the "listen" directive in /etc/nginx/sites-enabled/test.do-community.com:12
nginx: configuration file /etc/nginx/nginx.conf test failed
توصیه می کنیم همیشه این دستور سینتکسی را اجرا کنید تا مطمئن شوید که چیزی در فایل پیکربندی شما کم یا نامعتبر نباشد. علاوه بر این، همیشه باید sudo systemctl reload nginx را پس از هر گونه تغییر پیکربندی اجرا کنید. با این کار Nginx مجددا راه اندازی می شود و هر تغییری که ایجاد کرده اید اعمال می شود.
عیب یابی با systemctl status nginx
یکی دیگر از گزینه های عیب یابی خطاهای Nginx این است که تأیید کنید که این سرویس فعال است و روی سیستم شما کار می کند. این امکان وجود دارد که نصب کامل نشده باشد، یا شاید سرویس روشن نشده باشد. با بررسی وضعیت زیر می توانید از طریق سیستم systemd init بررسی کنید که آیا سرویس Nginx شما فعال است یا خیر:
systemctl status nginx
اگر سرویس شما در حال اجرا باشد، به عنوان فعال نمایش میدهد:
nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enable>
Active: active (running) since Tue 2022-11-29 16:37:49 UTC; 29s ago
Docs: man:nginx(8)
Process: 2679 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_proce>
Process: 2680 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (c>
Main PID: 2787 (nginx)
Tasks: 2 (limit: 1116)
Memory: 3.3M
CPU: 32ms
CGroup: /system.slice/nginx.service
├─2787 "nginx: master process /usr/sbin/nginx -g daemon on; master>
└─2790 "nginx: worker process"
و در صورتی که در حال اجرا و فعال نباشد بصورت زیر است:
○ nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enable>
Active: inactive (dead) since Tue 2022-11-29 16:42:27 UTC; 1s ago
Duration: 4min 38.006s
Docs: man:nginx(8)
Process: 2679 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_proce>
Process: 2680 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (c>
Process: 2915 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/>
Main PID: 2787 (code=exited, status=0/SUCCESS)
CPU: 39ms
اگر به این صورت باشد، ممکن است لازم باشد سرویس Nginx خود را دوباره راه اندازی کنید. با دستور زیر می توانید این کار را انجام دهید:
sudo systemctl restart nginx
پس از آن، می توانید systemctl status nginx را اجرا کنید تا مطمئن شوید که سرویس شما فعال شده است یا خیر.
سایر نکات عیب یابی
اگرچه ما فقط سه روش را برای عیب یابی خطاهای Nginx بررسی کردیم، در اینجا چند نمونه دیگر که مخصوص فایروال و تنظیمات پیکربندی هستند، آورده شده است.
تنظیم تنظیمات فایروال
هنگامی که Nginx را راه اندازی می کنید، سرور شما به طور پیش فرض از پورت HTTP 80 استفاده میکند. اگر این پورت را برای دریافت این درخواست ها باز ندارید، وب سایت شما به درستی کار نخواهد کرد. بسته به توزیع شما، تنظیم تنظیمات فایروال شما ممکن است متفاوت باشد. این مثال از فایروال ufw استفاده می کند. برای تأیید باز بودن پورت خود، می توانید وضعیت را با موارد زیر بررسی کنید:
sudo ufw status
مجدداً، شما به یک کاربر با امتیازات نیاز دارید. اگر خروجی شما موارد زیر را برمیگرداند، به این معنی است که پورت 80 مورد نیاز شما باز است، به خصوص پروفایل Nginx HTTP در لیست قرار دارد:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
اگر نیاز به باز کردن پورتهای اضافی مانند 443 دارید تا ترافیک HTTPS مجاز باشد، میتوانید این قانون را به لیست اضافه کنید:
'sudo ufw allow 'Nginx HTTPS
از طرف دیگر، می توانید هر دو قانون را با پروفایل واحد "Nginx Full" اضافه کنید:
'sudo ufw allow 'Nginx Full
برای تأیید باز بودن پورتها، وضعیت sudo ufw را دوباره اجرا کنید، و اگر آنها در لیست هستند، میتوانید مجدد بررسی نمایید که خطا رفع شده است یا خیر. همچنین می توانید مرورگر وب خود را بررسی کنید تا مطمئن شوید سرور شما با موفقیت راه اندازی شده و کار می کند.
بررسی فایل پیکربندی
اگر از وب سرور Nginx استفاده می کنید، احتمالاً یک بلوک سرور راه اندازی کرده اید، به خصوص اگر آموزش ما را در مورد نحوه نصب Nginx دنبال کنید. برای ارائه محتوای HTML مورد نظر خود، باید یک بلوک پیکربندی برای سایت خود تنظیم کنید. در اینجا نمونه ای از بلوک سرور با جزئیات پیکربندی دامنه شما آورده شده است:
} server {
;listen 80
;listen [::]:80
;root /var/www/your_domain/html
;index index.html index.htm index.nginx-debian.htm
;server_name your_domain www.your_domain
} / location
;try_files $uri $uri/ =404
{
{
هنگامی که به فایل پیکربندی اضافه میکنید یا بهروزرسانی میکنید، همیشه به یاد داشته باشید که پس از پایان کار ذخیره کنید. اگر از ویرایشگر متن نانو استفاده می کنید، می توانید این کار را با فشار دادن CTRL + X و Y و سپس ENTER انجام دهید. راه اصلی برای عیب یابی هر گونه مشکل در فایل پیکربندی شما این است که بررسی نحوی sudo nginx -t را که قبلا ذکر شد اجرا کنید و با راه اندازی مجدد Nginx با sudo systemctl راه اندازی مجدد nginx، آن تغییرات را فعال کنید.
همیشه میتوانید فایل پیکربندی خود را با باز کردن آن با ویرایشگر متن دلخواه خود ارزیابی کنید، مانند موارد زیر:
sudo nano /etc/nginx/sites-available/your_domain
به یاد داشته باشید که هر دستوری که دارید یا به این فایل اضافه می کنید باید دقیق باشد، در غیر این صورت خطای نامعتبر بودن چیزی را دریافت خواهید کرد.
در این آموزش نحوه رفع خطاهای رایج Nginx را آموزش دادیم. امیدواریم این مقاله آموزشی برای شما مفید بوده باشد، برای دیدن باقی آموزش ها میتوانید وارد منوی پشتیبانی بخش آموزش ها شوید، در صورتی که درباره این آموزش به مشکل یا سوالی برخورد کردید، میتوانید آن را در بخش دیدگاه بیان کنید.
آموزش های مرتبط:
آموزش نصب و کانفیگ Nginx بر روی Ubuntu
نصب و راه اندازی MySQL بر روی UBUNTU
آموزش نحوه نصب و پیکربندی UFW در Ubuntu
نصب و راه اندازی آپاچی بر روی Ubuntu
آموزش نصب MariaDB بر روی ابونتو