REGEX NGINX UNTUK SUB FOLDER LARAVEL

 Pada saat melakukan instalasi Nginx terdapat sub folder yang sudah di baca 

Berikut ini Konfigurasi agar Sub Folder Menjadi Dinamis

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    root /var/www/html;

    index index.php index.html;

    server_name _;

    ssl_certificate "/etc/letsencrypt/live/code.nanatech.id/fullchain.pem";
    ssl_certificate_key "/etc/letsencrypt/live/code.nanatech.id/privkey.pem";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;

    #UMUM
    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ ^/(.*)?/public {
        alias /var/www/html/$1/public;
        index index.php index.html index.htm;
       
        try_files $uri $uri/ /$1/public/index.php?$args;
    }
}

Perintah yang berpengaruh :
    location ~ ^/(.*)?/public {
        alias /var/www/html/$1/public;
        index index.php index.html index.htm;
       
        try_files $uri $uri/ /$1/public/index.php?$args;
    }

Penjelasan Per Baris

location ~ ^/(.*)?/public {

  • ~ → Menggunakan regex untuk mencocokkan URL.
  • ^/ → URL harus diawali dengan "/".
  • (.*)?
    • Menangkap semua karakter setelah /.
    • ? artinya bagian (.*) opsional, sehingga /public tanpa subfolder pun bisa cocok.
Contoh hasil tangkapan regex untuk $1:

URL: /sh/smkn1abang/tu/pegawai/public → $1 = sh/smkn1abang/tu/pegawai URL: /sh/smkn2denpasar/guru/public → $1 = sh/smkn2denpasar/guru URL: /public → $1 = (kosong, karena opsional)

alias /var/www/html/$1/public;

  • Mengubah root direktori menjadi /var/www/html/$1/public/.
  • $1 akan diganti dengan teks yang dicocokkan oleh (.*).
  • Contoh hasil alias:
URL: /sh/smkn1abang/tu/pegawai/public
Akan diarahkan ke: /var/www/html/sh/smkn1abang/tu/pegawai/public/
Perbedaan alias vs root:
  • alias mengganti seluruh path.
  • root menambahkan path setelah location.

index index.php index.html index.htm;

  • Jika pengguna mengakses /public/ tanpa file spesifik, maka akan otomatis menampilkan index.php, index.html, atau index.htm.

try_files $uri $uri/ /$1/public/index.php?$args;

  • Cek apakah file atau folder ada di dalam /var/www/html/$1/public/.
  • Jika tidak ada, maka akan diarahkan ke index.php di dalam /$1/public/.
  • ?$args akan mempertahankan query string dari URL asli
Contoh
Request: /sh/smkn1abang/tu/pegawai/public/dashboard Jika /var/www/html/sh/smkn1abang/tu/pegawai/public/dashboard tidak ada, maka akan diarahkan ke: /var/www/html/sh/smkn1abang/tu/pegawai/public/index.php?dashboard




Instalasi Laravel 10 dan Vue

 Langkah - Langkah 

1. Membuat Project Laravel dengan nama Latihan 1

composer create-project laravel/laravel latihan1

2. Masuk Ke Folder Project 

cd latihan1

3. Instalasi paket ui karena vue memerlukan ui untuk menjalankannya  

composer require laravel/ui

4. Mengaktifkan vue menggunakan ui

php artisan ui vue

5. install Vue dan Plugin 

npm install vue @vitejs/plugin-vue

6. Menjalankan NPM

npm run dev



Moodle Dengan Debian 12 (Nginx, Postgree dan PHP) Pada Proxmox

Sistem Operasi : Debian 12

DISK : 100GB

CPU : 4

Memory : 4096

Swap : 8192

IP : 192.168.1.5/24

Gateway : 192.168.1.1

DNS : 8.8.8.8



============== Pada Proxmox ==============

adduser lms

usermod -aG sudo lms


=============== Pada Putty / SSH ==============

===== Database Server =====

clear && apt update && apt upgrade -y && apt install postgresql -y && su - postgres

psql

CREATE USER admin WITH PASSWORD '12345678';

\du

CREATE DATABASE moodle ENCODING 'UTF8' TEMPLATE template0 OWNER admin;

\l

\c moodle

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO admin;

GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO admin;

\q

exit


===== Web Server =====

clear && apt install php-fpm php-pgsql php-mbstring php-xmlrpc php-soap php-gd php-xml php-intl php-zip php-curl php-cli php-opcache php-readline nginx unzip -y

clear && wget https://download.moodle.org/download.php/direct/stable405/moodle-latest-405.zip -O moodle.zip && unzip moodle.zip && rm -R /var/www/html/* && cp -R moodle/* /var/www/html && chown -R www-data:www-data /var/www/html && chmod -R 755 /var/www/html && mkdir /var/www/moodledata && chown -R www-data:www-data /var/www/moodledata && chmod -R 770 /var/www/moodledata && cp  /etc/nginx/sites-available/default  /etc/nginx/sites-available/default.bak && echo "" > /etc/nginx/sites-available/default && nano /etc/nginx/sites-available/default

server {

    listen 80;

    server_name yourdomain.com;

    client_max_body_size 10M;

    client_body_timeout 120s;


    root /var/www/html;

    index index.php;


    location / {

        try_files $uri $uri/ /index.php;

    }


    location ~ [^/]\.php(/|$) {

        fastcgi_split_path_info ^(.+\.php)(/.+)$;

        fastcgi_index index.php;

        fastcgi_pass unix:/run/php/php8.2-fpm.sock;

        include fastcgi_params;

        fastcgi_param PATH_INFO $fastcgi_path_info;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    }


    location ~* \.js$|\.css$|\.png$|\.jpg$|\.jpeg$|\.gif$|\.ico$|\.svg$|\.woff$|\.woff2$|\.ttf$|\.otf$|\.eot$|\.ttc$|\.jpe$ {

        expires max;

        log_not_found off;

    }

}


clear && /sbin/nginx -t && systemctl restart nginx && systemctl status nginx


clear && nano /etc/php/8.2/fpm/php.ini


max_execution_time = 300

memory_limit = 512M

post_max_size = 100M

upload_max_filesize = 100M

max_input_vars = 5000


clear && systemctl restart php8.2-fpm && systemctl status php8.2-fpm


========== Browser Client ================

URL : http://192.168.1.5