Ali Ghaleyan
4 سال پیش توسط Ali Ghaleyan مطرح شد
3 پاسخ

Laravel TrustedProxy

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


ثبت پرسش جدید
Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 4 سال پیش مطرح شد
2

مشکل به این شکل حل شد

<?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 میده


mahdi khanzadi
تخصص : Software engineer
@khanzadimahdi 4 سال پیش آپدیت شد
2

یه چیزی داریم به نام reverse proxy که کاربردش پخش کردن درخواست ها بین یکسری سرور هست. (بهش میگن لود بالانسینگ)

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

لود بالانسر

حالا داستانی که پیش میاد اینه که اگه کاربر لاگین کنه سشن باید واسه کاربر ساخته بشه نه واسه سرور لود بالانسر!
یکسری کانفیگ تنظیم میکنیم که سرور لود بالانسر به سرور مقصد بفهمونه که خودش واسط هست. سرور لود بالانسر یکسری header با نام forwardedfor میفرسته واسه سرور اصلی و میگه من واسط هستم.

حالا داستانی که پیش میاد چیه!!! داستان اینه که شما باید بگی پروکسی های مورد اعتماد من فلان پروکسی ها هستن (منظور سرور های لود بالانسر هست) و اگه درخواستی به غیر از اون ایپی بیاد قبول نمیکنی!!! چون ممکنه اون لود بالانسر دیتا رو hi-jack کنه و خیلی مباحث فنی دیگه!

میتونی راجبش مطالعه کنی. اما بحث devOps هست و بهتره درگیرش نشی. در همین حد بدونی کافیه.


Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 4 سال پیش مطرح شد
0

@khanzadimahdi
خیلی ممنون از توضیح خوبتون

ولی حالا همین شرایط سرور ها ک توضیح دادید رو ما داریم
یعنی وقتی سرور اول درخواست هارو بین سرور های دیگه پخش میکنه باعث میشه ip ک روی درخواست میخوره داخلی باشه و نمیتونم به ip اصلی کاربر دسترسی داشته باشم
و تا یه حدی هم میدونم که ip اصلی توی یک ایندکس دیگه ذخیره و ارسال میشه
اینکه نمیتونم وقتی هست که توی لاراول از کد زیر استفاده میکنم:

<?php
$request->ip();

در این صورت ip کاربر اصلی رو نمیده بهم
چون به طور پیشفرض از REMOTE_ADDR استفاده میکنه برای گرفتن ip از هدر
حالا من خواستم ایندکسی که متد ip ازش برای گرفتن ادرس ip استفاده میکنه رو تغییر بدم مثلا به X_FORWARDED_FOR یا هر ایندکس دیگه ای
که هر وقت من request()->ip() رو صدا زدم از این ایندکس استفاده بشه برای من


Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 4 سال پیش مطرح شد
2

مشکل به این شکل حل شد

<?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 میده


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام