Cập nhật 2018

Laravel phiên bản 5.5 trở lên đã tích hợp sẵn TrustedProxies. Bạn có thể bỏ qua bước cài đặt và chỉ cần sửa lại file cấu hìnhHttp/Middleware/TrustProxies.php là xong.


Bài viết này không hướng dẫn cách cấu hình ELB căn bản mà chỉ hướng dẫn fix lỗi https -> http của ELB (Elastic Load Balancing) với Laravel 5 bằng thư viện fideloper/proxy.

Quá trình gồm 5 bước sau đây:

  1. Cài đặt package
  2. Thêm Service Provider
  3. Publish file cấu hình
  4. Thêm middleware
  5. Sửa lại file cấu hình

1. Cài đặt package

Trusted proxy là thư viện của composer nên bạn có thể cài đặt dùng lệnh:

$ composer require fideloper/proxy

Hoặc sửa trực tiếp file composer.json:

{
    "require": {
        "fideloper/proxy": "^3.3"
    }
}

Sau đó dùng lệnh:

$ composer update

2. Thêm Service Provider

Sửa file config/app.php và thêm Provider của thư viện này vào trong mục providers

'providers' => array(
    # các dòng khác giữ nguyên
    # thêm dòng dưới đây
    Fideloper\Proxy\TrustedProxyServiceProvider::class,
);

3. Publish file cấu hình

Provider mà bạn thêm vào sẽ sử dụng cấu hình trong file /config/trustedproxy.php, để tạo file này chạy lệnh sau:

$ php artisan vendor:publish --provider="Fideloper\Proxy\TrustedProxyServiceProvider"

4. Thêm middleware

Mở file app/Http/Kernel.php và thêm class của thư viện vào mảng $middleware:

protected $middleware = [
    # các dòng khác giữ nguyên
    # thêm dòng dưới đây
    'Fideloper\Proxy\TrustProxies',
]

5. Sửa lại file cấu hình

Do thư viện này không chỉ để cấu hình riêng cho ELB nên ta phải sửa lại file /config/trustedproxy.php cho phù hợp.

<?php

return [
    'proxies' => '**',
    'headers' => [
        (defined('Illuminate\Http\Request::HEADER_FORWARDED') ? Illuminate\Http\Request::HEADER_FORWARDED : 'forwarded') => null,
        Illuminate\Http\Request::HEADER_CLIENT_IP    => 'X_FORWARDED_FOR',
        Illuminate\Http\Request::HEADER_CLIENT_HOST  => null,
        Illuminate\Http\Request::HEADER_CLIENT_PROTO => 'X_FORWARDED_PROTO',
        Illuminate\Http\Request::HEADER_CLIENT_PORT  => 'X_FORWARDED_PORT',
    ]
];

That’s all.

0 0 votes
Article Rating