Cách khắc phục sự cố Nội dung hỗn hợp trong laravel

When changing from http to https, it's possible to get the problem Mixed content issue - Content must be served as HTTPS.

So, first modify APP_URL in the .env file, if we use the assets helper, this shouldn't give any problem with the URL.

APP_URL=//mydomain.com

Finally, add the following to the beginning of api.php or web.php:

if [App::environment['production']] {
    URL::forceScheme['https'];
}

Nếu bạn đang gặp phải bất kỳ vấn đề nào liên quan đến Nội dung hỗn hợp trong dự án laravel của mình, đây có thể là một trong những giải pháp khả thi mà gần đây tôi gặp phải

Trong trường hợp của tôi, toàn bộ biểu định kiểu đã bị hỏng và tôi gặp các lỗi sau trong bảng điều khiển-

nội dung hỗn hợp. tải tất cả tài nguyên qua HTTPS để cải thiện tính bảo mật cho trang web của bạn

Tại sao nó xảy ra?

Tôi đang sử dụng asset[] để khai báo các kiểu và tập lệnh. Lý do thực sự là asset[] sẽ không tự động xử lý https. Đó là lý do tại sao nó đã xảy ra

Tôi đã giải quyết nó như thế nào?

Trong tệp .env của tôi, tôi đặt các dòng sau-


APP_URL=//myproject.test
ASSET_URL="${APP_URL}"

Ở đây, tôi chủ yếu thêm ASSET_URL thực sự lấy dữ liệu của APP_URL, tức là theo sau https. \

Khi bạn thiết lập giải pháp cân bằng tải, bạn sẽ có một máy chủ dành riêng để điều hướng lưu lượng cho các yêu cầu đến các máy chủ khác

Chứng chỉ SSL được áp dụng cho máy chủ cân bằng tải, nhưng không áp dụng cho máy chủ mục tiêu

Khi yêu cầu cho trang web đang được thực hiện, yêu cầu sẽ chạm vào bộ cân bằng tải và được mã hóa bằng SSL tại máy chủ cân bằng tải. Trong nội bộ, bộ cân bằng tải đang thực hiện một yêu cầu khác tới máy chủ mục tiêu. Tuy nhiên, yêu cầu này đang được thực hiện qua cổng 80, điều này sẽ chấm dứt SSL. Sau đó, máy chủ mục tiêu trả về yêu cầu qua httphttps đã bị chấm dứt trong quá trình liên lạc nội bộ

Vì vậy, về cơ bản đó là nó

Máy chủ mục tiêu không biết rằng nó cần trả lại thông tin bằng cách sử dụng https. Do đó, nội dung hỗn hợp sẽ bị gắn cờ và trang web sẽ không hiển thị chính xác vì nội dung đang được cung cấp trên http thay vì https

Đây cũng là lý do tại sao bạn có thể rất bối rối nếu lần đầu tiên bạn triển khai ứng dụng Laravel của mình trên một máy chủ thông thường chứ không phải phía sau bộ cân bằng tải, nơi mọi thứ hiển thị theo cách bạn mong đợi.

Bây giờ, hãy thảo luận về một vài cách để giải quyết vấn đề này

Giải pháp 1 - buộc các URL thành 'https'

Phương pháp đầu tiên là chỉ cần nói với ứng dụng của bạn rằng ứng dụng cần sử dụng https để tạo URL khi chạy ở chế độ sản xuất

Trong


APP_URL=//myproject.test
ASSET_URL="${APP_URL}"
4, chúng tôi sẽ thêm một số mã vào

APP_URL=//myproject.test
ASSET_URL="${APP_URL}"
5 để buộc URL thành https khi ứng dụng đang chạy ở chế độ sản xuất

// add this to the top of the file
use Illuminate\Support\Facades\URL;


// add this statement to public function boot[]
if[$this->app->environment['production']] {
    URL::forceScheme['https'];
};

Sau khi thực hiện các cập nhật ở trên, hãy triển khai ứng dụng của bạn và khi đó vấn đề về nội dung hỗn hợp sẽ không còn nữa

Giải pháp 2 - Thêm IP cân bằng tải vào danh sách proxy đáng tin cậy

Giải pháp thứ hai là giải pháp được đề xuất cho mỗi tài liệu của Laravel, đó là thêm các IP bên ngoài proxy đáng tin cậy vào danh sách các proxy được phê duyệt

Khi thay đổi từ http sang https, có thể gặp sự cố Sự cố nội dung hỗn hợp - Nội dung phải được cung cấp dưới dạng HTTPS

Vì vậy, trước tiên hãy sửa đổi APP_URL trong tệp .env, nếu chúng tôi sử dụng trình trợ giúp


APP_URL=//myproject.test
ASSET_URL="${APP_URL}"
9, điều này sẽ không gây ra bất kỳ vấn đề nào với URL

Điều này xảy ra khi bạn đang cố truy cập các liên kết không an toàn từ một trang web an toàn. Ví dụ trên xảy ra khi tôi triển khai một ứng dụng web laravel trên Digital Ocean. Tôi đã cố truy cập trang web và nó đã bị hỏng

Đây là cách trang web hiển thị trong trình duyệt của tôi

Đây là những gì tôi mong đợi dưới đây

Đây là những gì tôi mong đợi

Biến môi trường APP_URL của tôi đã được đặt đúng cách và tôi đã xác nhận nó từ bảng điều khiển thành phần

Tôi thấy một giải pháp phổ biến trên mạng, nhưng tôi cảm thấy đó là một điều chỉnh và tôi không muốn sử dụng nó. Đây là giải pháp

Vì vậy, tôi đã thử kiểm tra cách laravel tạo các url bằng cách sử dụng hàm asset[], sau đó tôi nhận ra rằng nó phụ thuộc vào giá trị cấu hình trong ứng dụng. php [asset_url] mà lần lượt phụ thuộc vào ASSET_URL [đây là lần đầu tiên tôi bắt gặp biến env này]

Chủ Đề