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 http
vì https
đã 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]