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ình ở Http/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:
- Cài đặt package
- Thêm Service Provider
- Publish file cấu hình
- Thêm middleware
- 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.