4.5 KiB
🚀 Quick Deploy CORS Middleware
⚡ Langkah Cepat (Production Server)
# 1. Masuk ke folder project
cd /www/wwwroot/api.btekno.cloud/api
# 2. Pull code terbaru (yang sudah include CORS middleware)
git pull origin main
# 3. Regenerate autoloader (untuk load class CorsMiddleware)
composer dump-autoload --optimize
# 4. Edit .env dan tambahkan konfigurasi CORS
nano .env
Tambahkan ke file .env:
# CORS Configuration
CORS_ALLOWED_ORIGINS=*
CORS_ALLOWED_METHODS=GET,POST,PUT,DELETE,OPTIONS
CORS_ALLOWED_HEADERS=Content-Type,Authorization,X-API-KEY,Accept,Origin
CORS_ALLOW_CREDENTIALS=true
Untuk Production (lebih aman):
# Ganti * dengan domain yang diizinkan
CORS_ALLOWED_ORIGINS=https://app.example.com,https://dashboard.example.com
# 5. Restart PHP-FPM (PENTING! Harus di-restart setelah perubahan code)
# Via aaPanel: Website -> PHP -> Service Management -> Reload
# Atau via command (sesuaikan dengan PHP version):
systemctl reload php-fpm-83 # Untuk PHP 8.3
# systemctl reload php-fpm-82 # Untuk PHP 8.2
# 6. (Opsional) Clear PHP Opcache jika masih ada masalah
# Via aaPanel: Website -> PHP -> Opcache -> Clear Cache
# Atau via command:
php -r "opcache_reset();"
✅ Verifikasi CORS Aktif
Test 0: Test CORS Middleware Secara Langsung (Recommended)
# Jalankan script test di server
php bin/test_cors.php
Script ini akan test CORS middleware secara langsung dan menunjukkan apakah headers sudah muncul.
Test 1: Cek Response Headers
curl -I -H "Origin: http://localhost:3000" https://api.btekno.cloud/health
Harus ada header:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization, X-API-KEY, Accept, Origin
Test 2: Test Preflight (OPTIONS)
curl -X OPTIONS \
-H "Origin: http://localhost:3000" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: Content-Type,Authorization" \
https://api.btekno.cloud/auth/v1/login
Harus return: HTTP 204 No Content dengan CORS headers.
Test 3: Test dari Browser Console
Buka browser console (F12) dan jalankan:
fetch("https://api.btekno.cloud/health", {
method: "GET",
headers: {
"Content-Type": "application/json",
},
})
.then((res) => res.json())
.then((data) => {
console.log("✅ CORS OK:", data);
})
.catch((err) => {
console.error("❌ CORS Error:", err);
});
🔍 Troubleshooting
Masalah: CORS headers tidak muncul di HTTP response
Jika php bin/test_cors.php sudah menunjukkan CORS headers muncul, tapi curl/HTTP tidak:
Solusi:
-
Restart PHP-FPM (PENTING!):
systemctl reload php-fpm-83 # Sesuaikan dengan PHP version # Atau via aaPanel: Website -> PHP -> Service Management -> Reload -
Clear PHP Opcache:
php -r "opcache_reset();" # Atau via aaPanel: Website -> PHP -> Opcache -> Clear Cache -
Cek apakah code sudah ter-pull:
cd /www/wwwroot/api.btekno.cloud/api git pull origin main composer dump-autoload --optimize -
Test lagi dengan curl:
curl -v -H "Origin: http://localhost/retribusi" https://api.btekno.cloud/health
Masalah: CORS headers tidak muncul sama sekali
Jika php bin/test_cors.php juga tidak menunjukkan CORS headers:
Solusi:
- Pastikan
CorsMiddlewaresudah di-load disrc/Bootstrap/app.php✅ - Pastikan
.envsudah ada konfigurasi CORS ✅ - Pastikan
composer dump-autoload --optimizesudah dijalankan ✅ - Check error log:
tail -f /www/wwwlogs/api.btekno.cloud.error.log
Masalah: Preflight OPTIONS return 404
Solusi:
- Pastikan routing middleware sudah di-load setelah CORS middleware ✅
- Cek nginx config: pastikan
try_filesmengarah keindex.php
Masalah: CORS hanya work untuk localhost
Solusi:
- Edit
.envdan setCORS_ALLOWED_ORIGINSdengan domain yang benar - Atau gunakan
*untuk development (tidak recommended untuk production)
📝 Catatan Penting
-
CORS middleware sudah otomatis handle:
- Preflight OPTIONS request
- CORS headers di semua response
- Localhost detection (http://localhost, http://127.0.0.1 dengan port apapun)
-
Tidak perlu konfigurasi nginx untuk CORS - semua di-handle di PHP middleware
-
Untuk production: Ganti
CORS_ALLOWED_ORIGINS=*dengan list domain yang spesifik -
CORS headers akan muncul di semua endpoint - termasuk
/health,/auth,/retribusi, dll