سلام دوستان خسته نباشید
اطلاع دارید که میدلور TrustProxies دقیقا چه کاری انجام میده؟
که اصلا proxy هایی که تعریف میشه چه کاری انجام میدن و چ تاثیری دارن؟
در حد خلاصه و مختصر ...
مشکل به این شکل حل شد
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array
*/
protected $proxies = [
'127.0.0.1',
];
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers = Request::HEADER_X_FORWARDED_ALL;
}
حالا هر درخواستی از 127.0.0.1 بیاد اگر هدر X_FORWARDED_FOR ست شده باشه اون رو به عنوان خروجی متد ip میده
یه چیزی داریم به نام reverse proxy که کاربردش پخش کردن درخواست ها بین یکسری سرور هست. (بهش میگن لود بالانسینگ)
شما یک سرور میزاری به عنوان سرور لود بالانسر و تمام درخواست ها میاد به اون سرور. بعدش اون سرور درخواست رو بر اساس شرایطی که براش مشخص کردی دوباره میزنه به یه سرور دیگه و جوابشو میگیره و میده به کاربر.
حالا داستانی که پیش میاد اینه که اگه کاربر لاگین کنه سشن باید واسه کاربر ساخته بشه نه واسه سرور لود بالانسر!
یکسری کانفیگ تنظیم میکنیم که سرور لود بالانسر به سرور مقصد بفهمونه که خودش واسط هست. سرور لود بالانسر یکسری header با نام forwardedfor میفرسته واسه سرور اصلی و میگه من واسط هستم.
حالا داستانی که پیش میاد چیه!!! داستان اینه که شما باید بگی پروکسی های مورد اعتماد من فلان پروکسی ها هستن (منظور سرور های لود بالانسر هست) و اگه درخواستی به غیر از اون ایپی بیاد قبول نمیکنی!!! چون ممکنه اون لود بالانسر دیتا رو hi-jack کنه و خیلی مباحث فنی دیگه!
میتونی راجبش مطالعه کنی. اما بحث devOps هست و بهتره درگیرش نشی. در همین حد بدونی کافیه.
@khanzadimahdi
خیلی ممنون از توضیح خوبتون
ولی حالا همین شرایط سرور ها ک توضیح دادید رو ما داریم
یعنی وقتی سرور اول درخواست هارو بین سرور های دیگه پخش میکنه باعث میشه ip ک روی درخواست میخوره داخلی باشه و نمیتونم به ip اصلی کاربر دسترسی داشته باشم
و تا یه حدی هم میدونم که ip اصلی توی یک ایندکس دیگه ذخیره و ارسال میشه
اینکه نمیتونم وقتی هست که توی لاراول از کد زیر استفاده میکنم:
<?php
$request->ip();
در این صورت ip کاربر اصلی رو نمیده بهم
چون به طور پیشفرض از REMOTE_ADDR استفاده میکنه برای گرفتن ip از هدر
حالا من خواستم ایندکسی که متد ip ازش برای گرفتن ادرس ip استفاده میکنه رو تغییر بدم مثلا به X_FORWARDED_FOR یا هر ایندکس دیگه ای
که هر وقت من request()->ip() رو صدا زدم از این ایندکس استفاده بشه برای من
مشکل به این شکل حل شد
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array
*/
protected $proxies = [
'127.0.0.1',
];
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers = Request::HEADER_X_FORWARDED_ALL;
}
حالا هر درخواستی از 127.0.0.1 بیاد اگر هدر X_FORWARDED_FOR ست شده باشه اون رو به عنوان خروجی متد ip میده
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟