Bạn chạy code ở local tại địa chỉ https://huypv.local và chạy bản dev ở địa chỉ https://dev.huypv.net. Hai bản này chung env, đều bật APP_DEBUG = true nhưng khi ở local thì debug bar hiển thị được cả các URL cũ còn trên dev thì lại ko hiển thị được. F12 thì thấy lỗi báo Mixed Content, debugbar gọi sai link ajax, đúng ra phải có https nhưng lại gọi http
Debug dần ta phát hiện ra tham số URL ajax được thiết lập ở đoạn code JS PhpDebugBar.OpenHandler ... Và nguyên nhân gốc rễ là hàm route() đã trả về link bị sai https
$openHandlerUrl = route('debugbar.openhandler');
$renderer->setOpenHandlerUrl($openHandlerUrl);
(code trong file LaravelDebugbar.php)
Vậy tại sao lại xảy ra vấn đề này khi mà local thì okie, dev mới bị! Tìm hiểu thêm thì ta thu được kết quả: do trên dev chạy qua proxy nên Laravel ko "nhận diện được" HTTPS. Lúc này hàm (1) $request->isSecure() cũng bị return false và route() trả về link http thay vì https
Cách xử lý: thêm vào hàm boot() trong file code AppServiceProvider.php đoạn sau:
$this->app['request']->server->set('HTTPS', 1);
Trường hợp local chạy http, dev mới chạy https thì phải dùng .env với APP_ENV khác nhau, ví dụ APP_ENV = local và APP_ENV = dev
Khi đó code sửa lại 1 chút để debugbar hoạt động ở cả local (HTTP) và dev (HTTPS)
$this->app['request']->server->set('HTTPS', $this->app->environment() != 'local');
Ghi chú:
1. namespace liên quan tới $request ở (1) là Illuminate\Http\Request
2. Để nhận diện HTTPS khi web chạy qua proxy thì có thể tham khảo biến _SERVER['HTTP_X_FORWARDED_PROTO'] nó sẽ là 'https'