0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Cách khắc phục lỗi 403 trong Laravel trên Ubuntu

Đăng vào 8 tháng trước

• 4 phút đọc

Chủ đề:

KungFuTech

Cách khắc phục lỗi 403 trong Laravel trên Ubuntu

Giới thiệu

Trong quá trình phát triển ứng dụng Laravel, đôi khi bạn sẽ gặp phải lỗi 403 Forbidden. Đây là lỗi thường gặp khi máy chủ không cho phép truy cập vào tài nguyên mà người dùng yêu cầu. Bài viết này sẽ hướng dẫn bạn từng bước để khắc phục lỗi này trên môi trường Ubuntu, cụ thể là trong trường hợp tôi đã gặp phải khi cài đặt một dự án Laravel trên máy tính mới.

Thiết lập môi trường phát triển

Gần đây, tôi đã thiết lập một môi trường phát triển trên một máy tính mới chạy Ubuntu 24. Tôi đã cài đặt LAMP, git, composer,... và tải về một dự án Laravel từ GitHub. Sau khi thiết lập xong, khi truy cập vào URL trong trình duyệt, tôi nhận được thông báo "403 Forbidden Access". Tôi đã thử nhiều cách nhưng cuối cùng, cách khắc phục lại không như tôi mong đợi.

Kiểm tra cấu hình Apache

Cấu hình VirtualHost

Đầu tiên, tôi đã kiểm tra lại tệp cấu hình Apache của mình để tìm lỗi hoặc chỉ thị sai. Đây là cấu hình VirtualHost mà tôi đã sử dụng:

apache Copy
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName mysite.test
    DocumentRoot /home/seongbae/projects/mysite/public

    <Directory "/home/seongbae/projects/mysite/public">
        AllowOverride All
        Require all granted
        Options FollowSymLinks
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Tất cả đều trông hợp lý. Các dự án Laravel khác của tôi cũng có cấu hình tương tự.

Kiểm tra mô-đun rewrite

Tiếp theo, tôi nghi ngờ rằng có thể do mô-đun rewrite của Apache chưa được kích hoạt. Theo mặc định, trên một cài đặt LAMP mới trên Ubuntu, mô-đun rewrite không được kích hoạt. Tôi đã thực hiện như sau để kích hoạt:

bash Copy
cd /etc/apache2/mods-available
a2enmod rewrite
service apache2 restart

Tuy nhiên, điều này cũng không giải quyết được vấn đề.

Kiểm tra tệp .htaccess

Một người bạn đã đề cập rằng dự án cần có tệp .htaccess với nội dung như sau:

apache Copy
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^public
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Thế nhưng, lỗi vẫn không biến mất.

Vấn đề có thể là quyền truy cập

Khi đó, tôi bắt đầu nghi ngờ rằng đây có thể là vấn đề về quyền truy cập. Có thể người dùng www-data không thể truy cập vào thư mục dự án nằm trong /home/seongbae/projects. Để kiểm tra giả thuyết này, tôi đã tạo một dự án Laravel dưới thư mục gốc của Apache tại /var/www/html. Nó hoạt động tốt! Vậy nên, tôi đã thu hẹp vấn đề đến việc thiết lập quyền không đúng.

Cấu hình quyền truy cập cho thư mục dự án

Tôi đã thử các lệnh sau để thay đổi quyền truy cập:

bash Copy
cd /home/seongbae/projects/mysite
sudo chown -R $USER:www-data .
sudo find . -type f -exec chmod 664 {} \;
sudo find . -type d -exec chmod 775 {} \;
sudo chmod -R ug+rwx storage bootstrap/cache

Các lệnh trên chủ yếu cấp quyền truy cập cho www-data vào thư mục site và thay đổi quyền cho tất cả các thư mục và tệp để www-data có thể truy cập chúng. Tôi cũng đã đảm bảo rằng www-data có thể ghi vào các thư mục storage và cache.

Tuy nhiên, khi vẫn không khắc phục được vấn đề, tôi cảm thấy thật bối rối. Tôi đã cài đặt Ubuntu hàng nghìn lần và gặp phải vấn đề này trước đây, nhưng không nhớ cách khắc phục. Tôi quyết định nếu khắc phục thành công lần nữa, tôi sẽ viết một bài blog cho bản thân trong tương lai.

Kiểm tra quyền truy cập cho các thư mục cha

Cuối cùng, tôi nhớ rằng www-data cũng cần quyền truy cập vào các thư mục cha:

Copy
/home/seongbae/projects/mysite
/home/seongbae/projects/
/home/seongbae

Vì vậy, tôi đã thay đổi nhóm cho từng thư mục cha:

bash Copy
sudo chgrp www-data <tên_thư_mục>

Khi tôi thay đổi nhóm cho cả ba thư mục cha, lỗi 403 Forbidden đã biến mất!

Kết luận

Tôi không rõ tại sao tất cả những thảo luận và giải pháp tôi tìm thấy trên mạng lại không đề cập đến việc khắc phục quyền truy cập cho các thư mục cha. Hy vọng điều này sẽ giúp ích cho ai đó... và cũng cho tôi trong tương lai để không tốn quá nhiều thời gian cố gắng khắc phục vấn đề forbidden này.

FAQ

1. Lỗi 403 Forbidden là gì?

Lỗi 403 Forbidden xảy ra khi máy chủ từ chối cho phép truy cập vào tài nguyên mà người dùng yêu cầu.

2. Làm thế nào để khắc phục lỗi này trong Laravel?

Bạn cần kiểm tra cấu hình Apache, quyền truy cập của thư mục và tệp, cũng như đảm bảo rằng mô-đun rewrite được kích hoạt.

3. Có cần thiết phải có tệp .htaccess không?

Có, tệp .htaccess là cần thiết để định hướng các yêu cầu đến thư mục public của ứng dụng Laravel.

4. Làm thế nào để thay đổi quyền truy cập cho thư mục trong Linux?

Bạn có thể sử dụng các lệnh chownchmod để thay đổi quyền truy cập cho thư mục và tệp trong Linux.

5. Tại sao quyền truy cập cho thư mục cha lại quan trọng?

Nếu các thư mục cha không có quyền truy cập đúng, người dùng www-data sẽ không thể truy cập vào thư mục dự án, dẫn đến lỗi 403.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào