Làm cách nào để buộc chuyển hướng sang HTTPS trong laravel 8?

Hôm nay mình sẽ hướng dẫn các bạn cách force redirect http sang https trong ứng dụng laravel. Chúng tôi có thể chuyển hướng bằng cách sử dụng. htaccess, cấu hình Nginx, v.v.

Khi tôi đang làm việc trên ứng dụng laravel đầu tiên của mình và tôi đã làm cho nó hoạt động và tôi muốn kết nối an toàn bằng ssl, tôi đã mua từ nhà cung cấp dịch vụ lưu trữ. Nhưng tôi đang nghĩ cách chuyển hướng http sang https của url trong Laravel

Tạo phần mềm trung gian

Bạn có thể tạo phần mềm trung gian sau đó bạn có thể sử dụng lệnh dưới đây để tạo phần mềm trung gian trong laravel. Vì vậy, hãy mở terminal và chạy lệnh dưới đây

Ví dụ này tập trung vào chuyển hướng buộc laravel sang https. Bài viết này sẽ cung cấp cho bạn ví dụ đơn giản về force redirect sang https htaccess laravel. tôi muốn chia sẻ với bạn nhà cung cấp laravel force https. bạn sẽ học laravel force https htaccess

Ở đây, tôi sẽ cung cấp cho bạn hai cách để buộc chuyển hướng http sang https trang web của bạn tất cả các url. một sử dụng tệp htaccess và một sử dụng phần mềm trung gian laravel. bạn có thể làm theo hướng dẫn này và bạn cũng có thể sử dụng với phiên bản laravel 6, laravel 7, laravel 8 và laravel 9

Khi bạn đã định cấu hình chứng chỉ SSL, bước tiếp theo là chuyển hướng lưu lượng truy cập không được mã hóa. Có một số phương pháp để làm điều này. Trong ứng dụng của bạn [Laravel], bởi máy chủ web [Apache hoặc Nginx] hoặc bởi giao diện người dùng [bộ cân bằng tải]. Bài viết này sẽ chuyển hướng các yêu cầu HTTP sang HTTPS trong Laravel bằng phần mềm trung gian

Nếu bạn cũng đang triển khai một bộ cân bằng tải giao diện người dùng, hãy định cấu hình cả giao diện người dùng HTTP và HTTPS. Trong hầu hết các trường hợp, bạn sẽ chuyển tiếp lưu lượng truy cập từ bộ cân bằng tải sang phần phụ trợ [Laravel] qua HTTP chứ không phải qua HTTPS. Điều này được gọi là Giảm tải SSL. Điều này có nghĩa là phần mềm trung gian Laravel của bạn phải phát hiện giao thức [HTTP hoặc HTTPS] mà máy khách đã kết nối với bộ cân bằng tải và bỏ qua giao thức mà bộ cân bằng tải đang sử dụng để kết nối với phần phụ trợ. Nếu không, phần mềm trung gian sẽ phát hiện HTTP ngay cả khi máy khách được kết nối với bộ cân bằng tải bằng HTTPS và máy khách sẽ chuyển sang vòng lặp chuyển hướng

Trong bài viết này, tôi sẽ sử dụng yourdomain.com. Thay thế bằng tên miền của bạn

Phần mềm trung gian của Laravel chỉ hỗ trợ các tệp được cung cấp bởi các tuyến đường. Các tệp không được cung cấp bởi Laravel, chẳng hạn như /js/app.js sẽ KHÔNG được chuyển hướng. Đây là một trong những lý do tôi muốn có Chuyển hướng HTTP dưới dạng nhiều lớp [bộ cân bằng tải, máy chủ web, khung ứng dụng]. Một lý do khác là để đảm bảo rằng có nhiều lớp dịch vụ thực thi Chuyển hướng HTTP

định cấu hình. env

Bài viết này hỗ trợ hai môi trường, phát triển và sản xuất. Cài đặt phát triển sẽ không chuyển hướng HTTP sang HTTPS. Môi trường sản xuất sẽ chuyển hướng. Môi trường sẽ được phát hiện bởi cài đặt APP_ENV

Cấu hình sản xuất

  • APP_ENV=sản xuất
  • APP_DEBUG=sai
  • APP_URL=https. //tên miền của bạn. com

Cấu hình phát triển

  • APP_ENV=cục bộ
  • APP_DEBUG=true
  • APP_URL=http. //máy chủ cục bộ. 8000

Nhãn môi trường ứng dụng local và production được sử dụng để bật/tắt một số tính năng nhất định trong Laravel

Thử nghiệm ban đầu

Mở trình duyệt web và kết nối với trang web của bạn qua HTTP. http. //tên miền của bạn. com. Xác minh rằng trang web của bạn tải chính xác và bạn không được chuyển hướng đến HTTPS. Ghi chú. một số miền TLD chẳng hạn như .dev tự động chuyển hướng trong trình duyệt. Nếu đây là trường hợp của bạn, hãy sử dụng phương pháp lệnh curl bên dưới

Mở một dấu nhắc lệnh và chạy lệnh này

1

curl -I http. //tên miền của bạn. com

Chúng tôi quan tâm đến phần đầu tiên của đầu ra là mã trạng thái HTTP. Nếu chuyển hướng HTTP bị tắt, bạn sẽ nhận được phản hồi 200

1

HTTP/1. 1 200 Được

Đối với bài viết này, chúng tôi muốn có phản hồi 200 để chúng tôi có thể triển khai và kiểm tra chuyển hướng HTTP

Nếu chuyển hướng HTTP được bật, thì bạn sẽ nhận được phản hồi 3xx với tiêu đề Vị trí HTTP

1

2

3

HTTP/1. 1 302 Đã tìm thấy

.. . .

Vị trí. https. //tên miền của bạn. com

Trước khi tiếp tục, hãy tắt chuyển hướng trong máy chủ web hoặc giao diện người dùng [bộ cân bằng tải]. Lưu các thay đổi của bạn để bạn có thể bật lại chuyển hướng ở giao diện người dùng hoặc tại máy chủ web

Ghi chú. các trình duyệt có xu hướng lưu trữ các chuyển hướng HTTP. Bạn có thể cần phải tắt bộ đệm của trình duyệt

Vô hiệu hóa bộ nhớ cache của Chrome

  • Mở Công cụ dành cho nhà phát triển Chrome [F12]
  • Chuyển đến tab Mạng và đảm bảo chọn Tắt bộ đệm ẩn được chọn
  • Luôn mở Công cụ dành cho nhà phát triển trong khi thử nghiệm

Tạo phần mềm trung gian

Sử dụng nghệ nhân tạo mẫu phần mềm trung gian

1

php nghệ nhân làm. phần mềm trung gian HttpRedirect

Điều này tạo ra tệp app/Http/Middleware/HttpRedirect.php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<?php

 

không gian tên Ứng dụng\Http\Middleware;

 

sử dụng Đóng;

sử dụng Chiếu sáng\Http\Request;

 

lớp HttpRedirect

{

    /**

* Xử lý một yêu cầu đến

*

* @param  \Illuminate\Http\Request  $request

* @param  \Close  $tiếp theo

* @return hỗn hợp

*/

    hàm công khai xử lý[Request $request, Closure $next]

    {

        trả lại $tiếp theo[$request];

    }

}

Gần đầu tệp thêm

1

sử dụng Chiếu sáng\Hỗ trợ\Facades\App;

Sửa đổi chức năng xử lý[]. Lưu ý các tính năng sau

  • Kiểm tra xem yêu cầu có đang sử dụng HTTP không. !$request->secure[]
  • Kiểm tra xem môi trường có phải là sản xuất không. App::environment['production']
  • Nếu cả hai yêu cầu đều được đáp ứng, hãy chuyển hướng máy khách đến cùng một URI bằng HTTPS. Nếu không, hãy chuyển sang trình xử lý tiếp theo

1

2

3

4

5

6

7

8

    hàm công khai xử lý[Request $request, Closure $next]

    {

        nếu [. $yêu cầu-&gt . ;secure[] && App::môi trường['sản xuất'] {

                        trả lại chuyển hướng[]->secure[$request->getRequestUri[]];

        }

 

        trả lại $tiếp theo[$request];

    }

Chuyển hướng trên sẽ trả về mã HTTP 302. Đối với chuyển hướng HTTP sang HTTPS vĩnh viễn, hãy trả về mã HTTP 301 [chuyển hướng vĩnh viễn]

1

return redirect[]->secure[$request->getRequestUri[], 301];

Nếu bạn có môi trường phát triển, dàn dựng và sản xuất và bạn muốn chuyển hướng HTTP cho cả dàn dựng và sản xuất

1

2

3

4

5

6

7

8

    hàm công khai xử lý[Request $request, Closure $next]

    {

        nếu [. $yêu cầu-&gt . ;secure[] && App::môi trường[['dàn dựng', 'production']]] {

                        trả lại chuyển hướng[]->secure[$request->getRequestUri[], 301];

        }

 

        trả lại $tiếp theo[$request];

    }

Chỉnh sửa App/Http/Kernel.php và thêm phần mềm trung gian vào $middleware

1

2

3

    được bảo vệ $phần mềm trung gian = [

        . . .

        \Ứng dụng\Http\Middleware\HttpRedirect::lớp,

Xóa cấu hình

1

php nghệ nhân tối ưu hóa. xóa

Hỗ trợ giao diện người dùng proxy

Nếu bạn đang sử dụng bộ cân bằng tải kết nối với phụ trợ Laravel của mình bằng HTTP, hãy phát hiện tiêu đề HTTP X-Forwarded-Proto. Thay vào đó, hãy sử dụng mã này cho hàm /js/app.js0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

    hàm công khai xử lý[Request $request, Closure $next]

    {

        // Nếu khách hàng kết nối với giao diện người dùng [bộ cân bằng tải] qua https

        // chuyển hướng là không cần thiết

 

        nếu [$yêu cầu->headers->has['X-Forwarded-Proto']] {

            if [strcmp[$request->header['X-Forwarded-Proto'], 'https'] === 0] {

                        trả lại $tiếp theo[$request];

            }

        }

 

        nếu [. $yêu cầu-&gt . ;secure[] && App::môi trường[['dàn dựng', 'production']]] {

                        trả lại chuyển hướng[]->secure[$request->getRequestUri[], 301];

        }

 

        trả lại $tiếp theo[$request];

    }

Cảnh báo

Nếu ứng dụng Laravel của bạn không có proxy [bộ cân bằng tải] chấp nhận lưu lượng truy cập, đừng thêm mã proxy. Một hacker thông minh có thể thêm tiêu đề X-Forwarded-Proto theo cách thủ công và bỏ qua tính năng Chuyển hướng HTTP

Nếu bạn cho phép truy cập phụ trợ Laravel của mình từ bộ cân bằng tải và trực tiếp từ Internet, hãy thêm logic để chỉ xử lý tiêu đề X-Forwarded-Proto nếu yêu cầu đến từ một giao diện người dùng đã biết. Google Cloud HTTP[S] Load Balancers sử dụng dải địa chỉ IP /js/app.js3 và /js/app.js4

Tùy chọn bổ sung

Phần mềm trung gian ở trên sẽ chuyển hướng các yêu cầu được xử lý bởi các tuyến Laravel. Tôi cũng khuyên rằng Laravel luôn tạo nội dung bằng các URL dựa trên HTTPS. Ví dụ là các tham chiếu JavaScript và CSS

Chỉnh sửa /js/app.js5

Gần đầu thêm

1

2

sử dụng Chiếu sáng\Hỗ trợ\Facades\App;

sử dụng URL;

Thêm đoạn mã sau vào chức năng khởi động

1

2

3

4

5

6

    chức năng công khai khởi động[]

    {

        nếu [Ứng dụng. môi trường[['dàn dựng', 'production']]] {

            URL. forceScheme['https'];

        }

    }

Bản tóm tắt

Tôi thích triển khai nhiều lớp bảo mật hơn. Khi triển khai Chuyển hướng HTTP, tôi cố gắng triển khai tính năng này ở từng lớp dịch vụ. Bắt đầu với phần phụ trợ [Laravel], sau đó với máy chủ web [Apache hoặc Nginx] và cuối cùng là bộ cân bằng tải. Đôi khi mắc lỗi và một lớp có thể vô hiệu hóa Chuyển hướng HTTP. Bằng cách bật tính năng này trong nhiều dịch vụ, tôi có mức độ tin cậy cao hơn rằng dữ liệu của khách hàng vẫn được mã hóa

Tín dụng nhiếp ảnh

Tôi viết bài miễn phí về công nghệ. Gần đây, tôi đã biết về Pexels. com cung cấp hình ảnh miễn phí. Hình ảnh trong bài viết này được cung cấp bởi Pixabay tại Pexels

John Hanley

Tôi thiết kế phần mềm cho các hệ thống cấp doanh nghiệp và trung tâm dữ liệu. Nền tảng của tôi là hơn 30 năm về ảo hóa lưu trữ [SCSI, FC, iSCSI, mảng đĩa, hình ảnh]. Hơn 20 năm trong lĩnh vực nhận dạng, bảo mật và pháp y

Trong hơn 14 năm qua, tôi đã làm việc trong lĩnh vực đám mây [AWS, Azure, Google, Alibaba, IBM, Oracle] để thiết kế các giải pháp phần mềm lai và đa đám mây. Tôi là một MVP/GDE với một số

Làm cách nào để chuyển hướng tất cả HTTP sang HTTPS trong laravel?

sử dụng Illuminate\Support\Facades\URL; . $this->app['request']->server->set['HTTPS', true]; . forceScheme['https']; Điều này sẽ chuyển hướng tất cả yêu cầu tới https ở cấp ứng dụng.

Làm cách nào để buộc laravel sử dụng HTTPS?

Q. Làm cách nào để sử dụng HTTPS trong Laravel? . Bạn có thể đặt 'URL' => 'https. // tên miền bạn. com' trong cấu hình/ứng dụng. php hoặc Bạn có thể làm cho nó hoạt động với lớp Middleware.

Chủ Đề