Reverse Proxy menggunakan NGINX

Mengelola beberapa aplikasi Laravel dalam satu server menggunakan Nginx dan FrankenPHP memerlukan pemahaman tentang Reverse Proxy. FrankenPHP biasanya berjalan sebagai binary mandiri yang mendengarkan pada port tertentu, sementara Nginx bertugas sebagai gerbang utama yang meneruskan trafik ke port tersebut berdasarkan domain yang diakses.

Berikut adalah panduan lengkap konfigurasi untuk 5 aplikasi Anda.

Instalasi FrankenPHP

Menginstal FrankenPHP di Ubuntu adalah pilihan cerdas untuk performa tinggi karena ia menggabungkan server web (Caddy) dan PHP dalam satu binary yang efisien.

Berikut adalah panduan langkah demi langkah yang dirancang agar mudah diikuti.

Persiapan Sistem : Pastikan Ubuntu Anda sudah dalam kondisi terbaru.

sudo apt update && sudo apt upgrade -y

Serta instal beberapa library pendukung yang sering dibutuhkan oleh PHP:
sudo apt install -y curl unzip libnss3-tools

Cara Cepat: Mengunduh Binary Statis

Cara termudah adalah menggunakan static binary yang sudah dikompilasi. Ini tidak membutuhkan instalasi PHP tradisional (apt install php) karena semua sudah ada di dalamnya.

Cari versi terbaru di halaman rilis GitHub FrankenPHP.
Unduh menggunakan terminal (contoh versi 1.1.0 untuk arsitektur x86_64):
Berikan izin eksekusi:

chmod +x frankenphp
    ```
4.  **Pindahkan ke folder bin** agar bisa diakses dari mana saja:
    
```bash
    sudo mv frankenphp /usr/local/bin/
    ```

 

---

## 3. Menjalankan Server Pertama Anda
Sekarang Anda bisa menjalankan server hanya dengan satu perintah. Masuk ke direktori proyek Laravel atau aplikasi PHP Anda, lalu jalankan:

```bash
frankenphp php-server

Secara default, aplikasi akan berjalan di https://localhost (FrankenPHP otomatis mengurus sertifikat SSL lokal).

Jika ingin menggunakan port spesifik (misalnya port 8000) tanpa HTTPS otomatis untuk pengembangan:

frankenphp php-server --listen :8000

Persiapan Port FrankenPHP

Setiap aplikasi Laravel harus berjalan pada port yang berbeda di sisi FrankenPHP. Sebagai contoh, kita akan mengalokasikan port berikut:

Aplikasi Domain Port Internal (FrankenPHP)
Utama ppni.or.id 8001
App app.ppni.or.id 8002
API api.ppni.or.id 8003
Dashboard dashboard.ppni.or.id 8004
Member member.ppni.or.id 8005

Pastikan setiap aplikasi dijalankan dengan perintah (contoh untuk ppni.or.id):

./frankenphp php-server --listen :8001

Struktur Konfigurasi Nginx

Agar rapi dan mudah dikelola, kita akan membuat satu file konfigurasi untuk setiap domain di direktori /etc/nginx/sites-available/.

langkah-langkah :

Buat file konfigurasi untuk domain utama (ppni.or.id):

sudo nano /etc/nginx/sites-available/ppni.or.id

Masukkan script berikut:

server {
        listen 80;
        server_name ppni.or.id;

        location / {
            proxy_pass http://127.0.0.1:8001; # Arahkan ke port aplikasi 1
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    ```

3.  **Ulangi langkah di atas untuk 4 subdomain lainnya.**
    Cukup ganti `server_name` dan `proxy_pass` sesuai tabel di atas. Contoh untuk `api.ppni.or.id`:
    
```nginx
    server {
        listen 80;
        server_name api.ppni.or.id;

        location / {
            proxy_pass http://127.0.0.1:8003; # Port untuk API
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    ```

---

## 3. Optimasi: Menggunakan Upstream (Opsional tapi Disarankan)
Jika Anda ingin konfigurasi yang lebih profesional, gunakan blok `upstream`. Ini memudahkan jika di masa depan Anda ingin menambah *load balancing*.

 

Buat satu file master `/etc/nginx/conf.d/laravel_apps.conf`:
```nginx
upstream app_main      { server 127.0.0.1:8001; }
upstream app_core      { server 127.0.0.1:8002; }
upstream app_api       { server 127.0.0.1:8003; }
upstream app_dashboard { server 127.0.0.1:8004; }
upstream app_member    { server 127.0.0.1:8005; }

Lalu di file sites-available, Anda cukup memanggil namanya:

location / {
    proxy_pass http://app_api;
    include proxy_params;
}

Aktivasi dan Pengetesan

Setelah semua file dibuat di sites-available, Anda harus mengaktifkannya dengan membuat symbolic link ke folder sites-enabled.

Aktifkan semua konfigurasi:

sudo ln -s /etc/nginx/sites-available/ppni.or.id /etc/nginx/sites-enabled/
    sudo ln -s /etc/nginx/sites-available/app.ppni.or.id /etc/nginx/sites-enabled/
    sudo ln -s /etc/nginx/sites-available/api.ppni.or.id /etc/nginx/sites-enabled/
    sudo ln -s /etc/nginx/sites-available/dashboard.ppni.or.id /etc/nginx/sites-enabled/
    sudo ln -s /etc/nginx/sites-available/member.ppni.or.id /etc/nginx/sites-enabled/
    ```

2.  **Cek apakah ada error penulisan:**
    ```bash
    sudo nginx -t
    ```

3.  **Restart Nginx jika sukses:**
    
```bash
    sudo systemctl restart nginx
    ```

---

## 5. Tips Tambahan untuk Laravel & FrankenPHP

*   **Keamanan (SSL):** Sangat disarankan menggunakan HTTPS. Setelah konfigurasi di atas selesai, Anda bisa menjalankan `sudo certbot --nginx` untuk mendapatkan sertifikat SSL gratis dari Let's Encrypt bagi kelima domain tersebut.
*   **Upload Size:** Tambahkan `client_max_body_size 100M;` di dalam blok `http` atau `server` agar user bisa mengunggah file besar.
*   **Websocket:** Jika aplikasi menggunakan fitur real-time, pastikan menambahkan header berikut di dalam `location /`:
    
```nginx
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    ```

Dengan setup ini, Nginx akan bertindak sebagai polisi lalu lintas yang efisien di depan FrankenPHP, memastikan setiap request mendarat di aplikasi Laravel yang tepat.

 

Back