❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.

Nếu ứng dụng web của bạn trên DirectAdmin sử dụng RESTful API (Laravel, Node.js, hoặc các SPA framework), bạn có thể gặp lỗi 405 Method Not Allowed hoặc net::ERR_EMPTY_RESPONSE khi gửi request PUT, DELETE, hoặc PATCH.

Bài viết này giải thích nguyên nhân và cách khắc phục lỗi 405 trên DirectAdmin với cả Apache và Nginx.

Nguyên nhân

Mặc định DirectAdmin chỉ cho phép phương thức HTTP POSTGET trong PHP. Các phương thức khác như PUT, DELETE, PATCH, HEAD bị web server chặn lại. Đây là cấu hình bảo mật mặc định, nhưng gây vấn đề cho các ứng dụng API.

Khắc phục trên Apache

Thêm vào file .htaccess của website:


    Require all denied

💡 Đặt đoạn LimitExcept ở đầu file .htaccess, trước các rewrite rules của framework (Laravel, WordPress…) để đảm bảo nó được xử lý trước.

Khắc phục trên Nginx (nginx_apache)

Nếu dùng thiết lập nginx_apache, thêm cấu hình vào Nginx custom config:

vi /usr/local/directadmin/data/templates/custom/nginx_server.conf

Thêm nội dung:

proxy_set_header X-HTTP-Method-Override $request_method;
proxy_pass_request_headers on;

Áp dụng cấu hình:

cd /usr/local/directadmin/custombuild
./build rewrite_confs

ℹ️ Nếu dùng OpenLiteSpeed hoặc LiteSpeed, các HTTP methods thường được cho phép mặc định. Lỗi 405 trên LiteSpeed thường do cấu hình ứng dụng, không phải web server.

Kiểm tra sau khi cấu hình

Sau khi thêm cấu hình, bạn có thể dùng curl để kiểm tra nhanh các HTTP methods đã hoạt động chưa:

curl -X PUT -I https://yourdomain.com/api/endpoint
curl -X DELETE -I https://yourdomain.com/api/endpoint
curl -X PATCH -I https://yourdomain.com/api/endpoint

Nếu trả về HTTP status 200 hoặc 204 thay vì 405, cấu hình đã thành công.

Lỗi 405 kết hợp CORS

Nếu frontend và API khác domain (ví dụ app.example.com gọi API tại api.example.com), trình duyệt sẽ gửi preflight request bằng method OPTIONS trước khi gửi PUT/DELETE/PATCH. Nếu server chặn OPTIONS, bạn sẽ thấy lỗi 405 hoặc CORS error.

Để xử lý, thêm vào .htaccess (Apache):

Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, PATCH, OPTIONS"
Header always set Access-Control-Allow-Headers "Content-Type, Authorization"
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]

⚠️ Chỉ mở các HTTP methods mà ứng dụng thực sự cần. Không nên allow tất cả methods trên toàn bộ server vì lý do bảo mật.

Tổng kết

Lỗi 405 trên DirectAdmin thường do web server chặn HTTP methods không phải GET/POST. Chỉ cần thêm vài dòng vào .htaccess (Apache) hoặc nginx config là xong. Nếu vẫn gặp lỗi sau khi cấu hình, kiểm tra thêm cấu hình ứng dụng (Laravel .htaccess, PHP handler settings) và đảm bảo CORS headers đã được thiết lập đúng nếu frontend và API khác domain.

Chia sẻ:
Bài viết đã được kiểm duyệt bởi AZDIGI Team

Về tác giả

Thạch Phạm

Thạch Phạm

Đồng sáng lập và Giám đốc điều hành của AZDIGI. Có hơn 15 năm kinh nghiệm trong phổ biến kiến thức liên quan đến WordPress tại thachpham.com, phát triển website và phát triển hệ thống.

Hơn 10 năm phục vụ 80.000+ khách hàng

Bắt đầu dự án web của bạn với AZDIGI