راه حل مناسب اتصال وب سرویس خارجی به پروکسی معکوس در داکر


#1

با درود خدمت دوستان گرامی .

مقدمه:

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

مشکل:

فرض بر اینکه ما چندین کانتینر داریم که از چندین وب سرویس خارجی استفاده می کنند برخی ها حتی پشت وب سرویس api هستند و کاربر بهشون دسترسی ندارد چطور بدون دادن اینترنت و با چه راه حل مناسب می تونیم در بهترین حالت با وب سرویس خارجی ارتباط برقرار کنیم

پیوست:

نیاز های اصلی ما

۱. چطور در ساختار میکروسرویس مخصوصا سرور های پشت api چطور این روند رو پیاده کنیم
۲. چطور جلویگیری کنیم از دادن اینترنت به کانتینر ها
۳. و اگر نظری یا موردی هست که ما بر اساس کم تجربه بودن به اون توجه نکردیم رو لطفا بیان کنید.

ما برای حل مشکل ارتباط سایت با وب سرویس خارجی مجبور شدیم بهش اینترنت بدیم فعلنه تا کار کنه البته سرویس ما سرویسی بود که جلوی api بود وکاربر باهاش دسترسی داشت ولی بازم نمی دونیم با دادن اینترنت بهش ممکنه چه مشکلاتی به وجود بیاد و چه حمله هایی به ما بشه


#2

چنتا reverse proxy داری؟ دلیل اینکه ارتباط برقرار نمیشد چی بود؟


#3

کلا یک nginx هست برای reverse proxy . زمانیکه به کانتینر فونیکس نت نمیدیم انگار یه جورایی ارتباط یکطرفه داره چون لود کچپا انجام میشه و حتی وقتی روی کپچا کلیک میکنیم تیک هم میخوره و تایید میکنه ولی زمانیکه در فرم خودمون فیلد email و password رو وارد میکنیم و ورود میزنیم آپ خودمون خطا نمیده و بعد از چند ثانیه مکث پیام خطایی میده که انتظار نداریم .

ولی وقتی به کانتینر فونیکس نت میدیم و دوباره همون مراحل رو تکرار میکنیم کپچا لود میشه مثل قبل و تایید هم میشه و آپ ما هم مشکلی نداره


#4

منظور من همون بود! چه خطایی رخ میده؟


#5

درود توماج جان . اصلا خطایی من تو کنسولم ندیدم فقط ۱۹ ثانیه می ره تو حالت فکر کردن و بعد چون ارور نوشتم جوابی نمی گیره دوباره ریدایرکت می شه به صفحه اصلی ما. تو کنسول مروگر هم حتی اروری نبود

من اینجا یک فال بک نوشتم

defmodule TrangellHtmlSiteWeb.BlogFallbackController do
  use Phoenix.Controller
def call(conn, _params) do
      breadcrumb =
        [
          %{
            title: "بلاگ",
            link: "/blog",
            number: 1
          },
        ]
      conn
      |> put_flash(:error, "متاسفانه خطای غیر قابل پیشبینی اتفاق افتاده است. در صورتی که از فرمت ارسال اطلاعات کاملا مطمئن هستید لطفا با پشتیبانی سایت در تماس باشید")
      |> render(TrangellHtmlSiteWeb.ErrorView , :"all_error_indoors_page", breadcrumb: breadcrumb, active_menu: 2, page_name: "خطای بدون پیشبینی")
    end
end

که اگر هیچ کدوم از ارور های ۴۰۰ - ۳۰۰ - ۲۰۰ - ۵۰۰ - ۴۰۱ و … نبود این ارور چاپ بشه


#6

لاگ چطور؟

این مشکل بیشتر بنظر میاد به networking مربوط باشه,


#7

معمولا اگر google captcha یه مشکلی داشته باشه خودش خطا برگشت میده روی خودش ولی اینجا ما خطایی نداریم چه با نت چه بدون نت . در هر دو صورت کچپا تایید میده به ما وقتی روش کلیک میشه


#8

اینجا تایید می ده ولی متاسفانه وقتی کد ارسال شده و می خوام با گوگل چک کنم اونجاست که می ره تو فکر

لازم به ذکر هست چک کردن من با گوگل خیلی ساده هست

 def google_recap(response) do
    TrangellHtmlSite.google_post_recap("https://www.google.com/recaptcha/api/siteverify", %{"secret" => "MYSEC CODE", "response" => response})
  end

  def google_post_recap(root_link, params) do
    body = "secret=#{params["secret"]}&response=#{params["response"]}"
    HTTPoison.post(
      "#{root_link}",
       body,
        [
          {"Content-Type", "application/x-www-form-urlencoded"},
          {"Accept", "text/html"}
        ],
       [timeout: 50_000, recv_timeout: 50_000]
    )
  end

#9

خار از موضوع: breadcrumb باید breadcrumbs باشه چون مجموعست


#10

توجه نکرده بودم ممنونم . درست می فرمایید


#11

بزار یکم سرچ کنم ببینم چی دستگیرم میشه


#12

الان اون بالا رو که خوندم متوجه شدم مشکل چیه, سرویس های شما در private network هست


#13


#14

شاید با یک proxy دیگه که api call ها رو wire کنه مشکل حل بشه


#15

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

Serving Static Content Via POST From Nginx
و
post method not working with reverse proxy


#16

درود من اومدم اون قسمت خطا رو چاپ کردم بعد از ۱۸ الی ۱۹ ثانیه تو لوکالم اینترنت قطع کردم دیدم ارور زیر رو زده

چون نمی تونه درخواست بره متاسفانه اینجا تایم اوتش تمام می شه و ارور می ره


#17

unprocessable entity


#18

دلیل ۴۲۲ پیدا شد؟ برای اتصال سرویسهایی که private هستند من از یک proxy app استفاده میکنم، اما ۴۲۲ باید اول دلیل اصلیش پیدا بشه


#19

سلام
نه هنوز مشخص نشده فعلا در حال بررسی کدهای کپچا و ارسال و دریافت پاسخشون هستم


#20

ما بیشتر فکر می کنیم که نتونستیم درخواست رو به وسیله پروکسی بفرستیم به همین ترتیب من فکر کردم یک پست بزنیم در انجمن الکسیر برای اتصال اچ تی تی پی پویزن به پروکسی