وبلاگ نت‌آرامآموزش، تجربه و راهکارهای زیرساخت

برنامه روی localhost باز می‌شود اما از بیرون سرور نه؛ چه کنیم؟

نشانی گوش دادن برنامه، reverse proxy و مجوز فایروال را جدا بررسی کنید تا سرویس را ناخواسته عمومی نکنید.

انتشار:
توسط تیم فنی نت‌آرام
۳ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله برنامه روی localhost باز می‌شود اما از بیرون سرور نه؛ چه کنیم؟ در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
برنامه را روی سرور اجرا کرده‌اید و نشانی 127.0.0.1 به آن پاسخ می‌دهد، اما از رایانه شخصی نمی‌توانید آن را ببینید. این حالت گاهی کاملاً عمدی است: برنامه فقط روی رابط داخلی سرور گوش می‌دهد و قرار است وب‌سرور درخواست‌های بیرونی را به آن برساند.

localhost یعنی کجا؟

نشانی 127.0.0.1 در هر دستگاه به همان دستگاه اشاره می‌کند. بنابراین وقتی روی لپ‌تاپ خودتان آن را باز می‌کنید، درخواست به لپ‌تاپ می‌رود نه به VPS. در خروجی سرور، 127.0.0.1:3000 یعنی پورت 3000 روی رابط داخلی IPv4 گوش می‌دهد؛ نشانی 0.0.0.0:3000 یعنی روی همه رابط‌های IPv4 گوش می‌دهد. پیکربندی IPv6 مانند ::1 و :: نیز جدا بررسی می‌شود.

برنامه واقعاً کجا گوش می‌دهد؟

روی سرور اجرا کنید:
کد / دستورsudo ss -lntp
پورت و برنامه مورد نظر را در خروجی پیدا کنید. سپس در خود سرور یک نشانی محلی کم‌خطر را امتحان کنید:
کد / دستورcurl -i http://127.0.0.1:3000/
عدد 3000 و مسیر / مثال هستند. اگر این پاسخ ناموفق است، پیش از بررسی فایروال گزارش و وضعیت خود برنامه را بخوانید. اگر پاسخ محلی درست است، هنوز معلوم نیست مسیر عمومی چگونه باید به برنامه وصل شود.

آیا وب‌سرور واسط دارید؟

بسیاری از برنامه‌ها عمداً فقط به localhost متصل‌اند و Nginx یا Apache به عنوان reverse proxy از بیرون درخواست HTTPS را دریافت و به برنامه داخلی می‌فرستد. در این معماری لازم نیست پورت برنامه را عمومی کنید. دامنه، پورت داخلی و مسیر تنظیم وب‌سرور را با پیکربندی برنامه مقایسه کنید و پس از تغییر تنظیم، اعتبارسنجی خود وب‌سرور را قبل از اعمال انجام دهید.
اگر باید برنامه مستقیماً از شبکه در دسترس باشد، ابتدا مشخص کنید چه نشانی‌هایی و چه کسانی مجازند. گوش دادن روی همه رابط‌ها می‌تواند برنامه را برای اینترنت باز کند. پورت پایگاه داده یا پنل مدیریتی را صرفاً برای رفع مشکل عمومی نکنید؛ فایروال و محدودیت شبکه باید متناسب با نیاز تنظیم شوند.

نمونه مسیر با وب‌سرور واسط

اگر برنامه روی 127.0.0.1:3000 پاسخ می‌دهد و سایت باید از طریق Nginx باز شود، در تنظیم سایت Nginx مقصد proxy_pass را با همین نشانی و پورت واقعی برنامه تطبیق دهید. قبل از تغییر از فایل همان سایت نسخه پشتیبان بگیرید و پس از ویرایش دستور sudo nginx -t را اجرا کنید. فقط در صورت تأیید پیکربندی، طبق روش مدیریت سرورتان سرویس را reload کنید و از یک شبکه مجاز URL عمومی را امتحان کنید. اگر تست خطا داد، تنظیم قبلی را برگردانید؛ لازم نیست پورت 3000 عمومی شود.

از بیرون هم آزمایش کنید

از یک منبع مجاز، نام دامنه و پورت واقعی را آزمایش کنید. نتیجه محلی، پاسخ وب‌سرور واسط و نتیجه خارجی را همراه ساعت ثبت کنید. اگر فقط از یک شبکه شکست می‌خورد، مسیر و قوانین همان مبدأ نیز باید بررسی شود. پس از اصلاح، هم ارتباط مجاز و هم نبود دسترسی ناخواسته را بررسی کنید؛ پاسخ localhost به تنهایی انتشار عمومی سالم را ثابت نمی‌کند.
اگر از کانتینر استفاده می‌کنید، localhost داخل کانتینر به همان کانتینر اشاره دارد و لزوماً آدرس داخلی سیستم میزبان نیست. تنظیم انتشار پورت و شبکه کانتینر را نیز در مستندات محیط خود بررسی کنید. پیش از تغییر، مشخص کنید قرار است چه برنامه‌ای و از کدام شبکه به سرویس برسد.
اشتراک‌گذاری:
لینکدینتلگرامایکس

دیدگاه‌ها (۰)

دیدگاه‌های تاییدشده و پاسخ‌های تیم نت‌آرام