Làm một phát được ngay không lỗi gì https://chat.codewebdao.com/
P/s: Project này còn một vấn đề là nếu các member khác trong room không online thì ta không thể chat private cho các member đó được.
Chào bạn. Cho mình hỏi tại sao bạn lại nói: "Chúng ta đọc mẫu mỗi 1/1000s và ghi lại con số đại diện chiều cao cùa sóng âm."? Theo mình hiểu ý bạn là: Tương tự như video, mỗi giây sẽ có hàng ngàn frame ảnh, thì file âm thanh, mỗi giây sẽ có hàng ngàn tần số. Đúng không bạn?
Khi bạn không mount source code vào webserver thì khi truy cập tới các file css,js sẽ bị báo lỗi (404 từ phía Laravel, không phải từ phía Nginx nhé). Lí do bởi vì như ở comment trên mình đã nói, ở location ~ \.php$ ta đã bỏ đi try_files $uri =404 nhằm mục đích không mount source code mà vẫn chạy đc (như ý bạn muốn), do vậy Nginx sẽ không tìm các file css,js ở phía nó nữa mà cứ proxy thẳng vào app luôn, dẫn tới việc toàn bộ request sẽ được proxy vào service app và đc chuyển tới file index.php, tới đó thì Laravel sẽ đọc tìm xem có route nào tên là /js/app.js hay /css/app.css hay không, và tất nhiên ở routes/web.php ta không có các route như vậy nên bị lỗi 404 (thế nên ta mới thấy Laravel báo lỗi, không phải Nginx nhé).
Về khắc phục việc này thì khá đơn giản bản chỉ cần cấu hình lại chút là được.
Mình đã demo và chạy ngon, các file cấu hình ở đây nhé bạn.
Chú ý mình có mount file cấu hình PHP-FPM www.conf, bạn để ý dòng security.limit_extensions, mặc định PHP-FPM sẽ không allow cho các file .css, .js mà ta cần mount cấu hình do ta định nghĩa vào thì mới có.
Thứ nữa ở file cấu hình Nginx ta phải thêm 2 block location để bắt URL khi user truy cập vào các đường dẫn chứa file css, js.
Lí do phải chia thành 2 block location riêng cho css và js là để xử lý Content-Type (mime-type) cho .css và .js lí do là bởi vì bây giờ nginx proxy toàn bộ vào PHP-FPM rồi nên mime-type của các file js, css sẽ không được detect bởi Nginx nữa mà sẽ được detect phía bên PHP-FPM và luôn trả về text/html dẫn tới nếu web của bạn load các file này lên sẽ bị lỗi mime-type không chính xác.
Nom 2 block location giống y hệt nhau khác mỗi content-type, nhưng ta cũng không nên để if vào trong location để check (với mong muốn cho code gọn hơn), lí do là vì If is Evil... when used in location context. Bạn có thể dùng map để làm điều đó, nhưng nó vượt ngoài phạm vi ta đang trao đổi
Các file .js, .css khi chạy production để tối ưu nhất bạn nên để nó ở phía Nginx chứ không nên proxy hết cả vào PHP-FPM làm gì, PHP-FPM tốt nhất nên chỉ để chạy code PHP như cấu hình mặc định của nó vậy (đoạn security.limit_extensions trong file www.conf), Nginx serve các tài nguyên static này (css, js) rất tốt và tối ưu. Đó là lí do vì sao bài này và thực tế mình làm thì luôn chọn mount source code vào Nginx
Thank bạn đã chia sẻ bài viết rất hữu ích. Bạn cho mình hỏi thêm ở mục 2. Script đó có độc lập không? với.
Ở đây bạn nói là dùng async để quá trình load và execute script song song, tuy nhiên ở chỗ đầu bài viết đoạn giả thích về <script async> mình thấy 2 quá trình anỳ có thực thi song song đâu, nó chờ tải file về rồi mới execute mà nhỉ ?
@maitrungduc1410 nhưng của mình nếu ko mount vào sever web thì ko đọc được file css, js. Bạn có thể giải thích tại sao được ko, hoặc có cách nào khắc phục ngoài việc phải mount vào nginx ko nhỉ.
Sau comment của bạn mình mới nhận ra do file cấu hình Nginx ở location ~ \.php$ mình đang để là try_files $uri =404 do vậy Nginx sẽ cố gắng tìm file .php và thực thi do vậy dẫn tới lỗi 404. Bỏ dòng này đi thì sẽ chạy bình thường không cần mount code vào service webserver như bạn nói.
Luôn có những điều mới mình nhận ra sau những comment như của bạn. cám ơn bạn nhé
Bạn không mount source code vào webserver mà vẫn chạy được à bạn?
Luồng request của app PHP với Nginx sẽ là như sau:
User request -> request tới Nginx -> Nginx tìm tới các file .php tương ứng với URL đang request và thực thi -> Nginx proxy request vào PHP-FPM (thông qua FastCGI) -> PHP-FPM tìm tới các file .php và chạy
Do vậy nếu bạn không mount code vào Nginx thì ở bước nginx tìm các file .php sẽ báo lỗi 404:
THẢO LUẬN
thank bạn đã chia sẻ
cho e hỏi automatic css với bootstrap khác nhau ntn?
@caophihung94 tuyệt vời




@maitrungduc1410 Tại mình cũng có một chút kiến thức về server và laravel rồi nên dễ làm theo.
xịn quá, 1 phát bạn đã ăn ngay rồi
.
Ở project này mình chỉ detect user online và cho private chat với họ.
Bạn có thể custom load ra danh sách user cả online + offline hoặc cho tìm kiếm user không online sau đó cho private chat
Làm một phát được ngay không lỗi gì
https://chat.codewebdao.com/
P/s: Project này còn một vấn đề là nếu các member khác trong room không online thì ta không thể chat private cho các member đó được.
Có tài liệu nào liên quan đoạn công thức (3-10) không ạ, em đọc lại mấy lần rồi mà không hiểu lắm mặc dù bài viết viết khá rõ :orz:
Chào bạn. Cho mình hỏi tại sao bạn lại nói: "Chúng ta đọc mẫu mỗi 1/1000s và ghi lại con số đại diện chiều cao cùa sóng âm."? Theo mình hiểu ý bạn là: Tương tự như video, mỗi giây sẽ có hàng ngàn frame ảnh, thì file âm thanh, mỗi giây sẽ có hàng ngàn tần số. Đúng không bạn?
Đừng dùng user root là được b, có thể dùng user nginx hoặc www-data là ổn
@maitrungduc1410 oh, cảm ơn bạn nhiều nhé
Thanks bạn, mình cũng đang để user là nginx.
cảm ơn anh vì bài viết ạ

@hoangkim1982
Khi bạn không mount source code vào
webserverthì khi truy cập tới các filecss,jssẽ bị báo lỗi (404 từ phía Laravel, không phải từ phía Nginx nhé). Lí do bởi vì như ở comment trên mình đã nói, ởlocation ~ \.php$ta đã bỏ đitry_files $uri =404nhằm mục đích không mount source code mà vẫn chạy đc (như ý bạn muốn), do vậy Nginx sẽ không tìm các filecss,jsở phía nó nữa mà cứ proxy thẳng vàoappluôn, dẫn tới việc toàn bộ request sẽ được proxy vào serviceappvà đc chuyển tới fileindex.php, tới đó thì Laravel sẽ đọc tìm xem có route nào tên là/js/app.jshay/css/app.csshay không, và tất nhiên ởroutes/web.phpta không có các route như vậy nên bị lỗi 404 (thế nên ta mới thấy Laravel báo lỗi, không phải Nginx nhé).Về khắc phục việc này thì khá đơn giản bản chỉ cần cấu hình lại chút là được.
Mình đã demo và chạy ngon, các file cấu hình ở đây nhé bạn.
Chú ý mình có mount file cấu hình PHP-FPM
www.conf, bạn để ý dòngsecurity.limit_extensions, mặc định PHP-FPM sẽ không allow cho các file.css, .jsmà ta cần mount cấu hình do ta định nghĩa vào thì mới có.Thứ nữa ở file cấu hình Nginx ta phải thêm 2 block
locationđể bắt URL khi user truy cập vào các đường dẫn chứa filecss, js.Lí do phải chia thành 2 block
locationriêng chocssvàjslà để xử lýContent-Type(mime-type) cho.cssvà.jslí do là bởi vì bây giờ nginx proxy toàn bộ vào PHP-FPM rồi nên mime-type của các filejs, csssẽ không được detect bởi Nginx nữa mà sẽ được detect phía bên PHP-FPM và luôn trả vềtext/htmldẫn tới nếu web của bạn load các file này lên sẽ bị lỗi mime-type không chính xác.cam on ban da support ak
Thank bạn đã chia sẻ bài viết rất hữu ích. Bạn cho mình hỏi thêm ở mục 2. Script đó có độc lập không? với.
Ở đây bạn nói là dùng
asyncđể quá trìnhloadvàexecutescript song song, tuy nhiên ở chỗ đầu bài viết đoạn giả thích về <script async> mình thấy 2 quá trình anỳ có thực thi song song đâu, nó chờ tải file về rồi mớiexecutemà nhỉ ?@nguyenxuandat252 có vẻ b vẫn chưa hiểu case này
))
@maitrungduc1410 nhưng của mình nếu ko mount vào sever web thì ko đọc được file css, js. Bạn có thể giải thích tại sao được ko, hoặc có cách nào khắc phục ngoài việc phải mount vào nginx ko nhỉ.
@hoangkim1982
Sau comment của bạn mình mới nhận ra do file cấu hình Nginx ở
location ~ \.php$mình đang để làtry_files $uri =404do vậy Nginx sẽ cố gắng tìm file.phpvà thực thi do vậy dẫn tới lỗi 404. Bỏ dòng này đi thì sẽ chạy bình thường không cần mount code vào servicewebservernhư bạn nói.Luôn có những điều mới mình nhận ra sau những comment như của bạn. cám ơn bạn nhé
@maitrungduc1410 của mình ko cần mout sang server web vẫn chạy bình thường nhé, chỉ có điều nó chỉ đọc được file php còn các file tĩnh như css, js ko đọc được Mình làm theo hướng dẫn này, ko hề có mount sang server web https://kipalog.com/posts/Thu-cai-dat-moi-truong-docker-cho-laravel
@hoangkim1982
Bạn không mount source code vào
webservermà vẫn chạy được à bạn?Luồng request của app PHP với Nginx sẽ là như sau:
User request -> request tới Nginx -> Nginx tìm tới các file
.phptương ứng với URL đang request và thực thi -> Nginx proxy request vào PHP-FPM (thông qua FastCGI) -> PHP-FPM tìm tới các file.phpvà chạyDo vậy nếu bạn không mount code vào Nginx thì ở bước nginx tìm các file
.phpsẽ báo lỗi 404: