nginx njs: memasang modul, mengatur js_set, dan menerapkan reload untuk membuat variabel JavaScript

Pemberitahuan afiliasi Ver 3.1
Pemberitahuan afiliasi Ver 3.2 (khusus seluler)
Lingkungan uji Keluarga RHELAlmaLinux 9.8Nginx 1.28 + Apache 2.4njs 0.9.4WP Rocket 3.23.5.1Diperiksa 2026-10-17

nginx njs adalah modul resmi nginx yang memproses permintaan atau membuat nilai variabel dengan fungsi JavaScript di dalam konfigurasi nginx. Di server dengan konfigurasi Nginx + Apache, untuk menyamakan huruf besar-kecil URL permintaan yang tidak bisa diubah hanya dengan konfigurasi nginx, modul njs diinstal dengan versi yang sama dengan nginx yang terpasang, lalu variabel yang dibuat dengan js_set dimasukkan ke jalur file cache dan diterapkan dengan reload tanpa restart.

Fungsi contohnya hanya satu baris yang mengubah percent-encoding URL berhuruf Korea menjadi huruf kecil, dan cara membuat variabel dengan membaca nilai header atau argumen dari objek permintaan juga sama.

1️⃣ Apa itu nginx njs: modul yang memperluas fungsi nginx dengan JavaScript

njs bukan lingkungan eksekusi JavaScript yang berjalan sendiri seperti Node.js: tidak ada skrip awal atau event loop sendiri, dan kode hanya berjalan saat nginx memanggil fungsi yang ditentukan di konfigurasi, lalu pemrosesan kembali ke nginx.

Titik tempat nginx memanggil fungsi JavaScript sudah ditetapkan: tahap pemrosesan permintaan dan respons HTTP, tahap pemrosesan sesi TCP·UDP, perhitungan nilai variabel, dan timer berkala. Fungsi membaca URL, header, dan argumen dari objek permintaan yang diberikan nginx, lalu mengembalikan hasilnya sebagai respons atau nilai variabel.

Di sisi HTTP, [js_import] memuat file skrip, [js_set] membuat nilai variabel, [js_content] membuat isi respons, serta [js_header_filter] dan [js_body_filter] mengolah header dan isi respons. Direktif yang dipakai dalam penerapan ini ada dua: [js_import] dan [js_set].

🧭 Titik tempat nginx memanggil fungsi njs
Diagram penjelasan
📌 Titik pemanggilan
📥 Permintaan
🖥️ nginx
Tahap pemrosesan · titik yang ditentukan di konfigurasi
js_setPerhitungan nilai variabel
js_contentIsi respons
js_header_filter · js_body_filterPengolahan header · isi respons
Panggil→
📜 Fungsi njs
Objek permintaan yang diberikan nginx
Membaca URL · header · argumen
↩️ Dikembalikan sebagai nilai variabel
↩️ Dikembalikan sebagai respons
↩️ Dikembalikan sebagai header · isi yang diolah
❌ Tidak berjalan sendiri seperti Node.jsTanpa skrip awal · tanpa event loop sendiri
Kembali→
🖥️ nginx
Melanjutkan pemrosesan
Nilai variabelDipakai di sini · dimasukkan ke jalur file cache
Isi responsMerespons dengan isi yang dibuat fungsi
Header · isi responsMerespons dengan header dan isi yang diolah
📤 Respons
[js_set] memanggil fungsi di titik saat nginx menghitung nilai variabel; nilai yang dikembalikan fungsi menjadi nilai variabel, lalu pemrosesan kembali ke nginx.
[js_content] memanggil fungsi di titik pembuatan isi respons, dan nginx mengirim respons yang dibuat fungsi dari objek permintaan.
[js_header_filter] dan [js_body_filter] memanggil fungsi pada tahap pengiriman respons untuk mengolah header dan isi respons, dan setelah selesai, pemrosesan kembali ke nginx.

Mesin bawaan modul njs mengimplementasikan ECMAScript 5.1 (strict mode) ditambah sebagian fitur ECMAScript 6 dan sesudahnya. Pengolahan string setingkat penggantian regex dan fungsi berjalan dalam cakupan ini.

2️⃣ Kapan njs diperlukan: nilai variabel yang tidak bisa diubah hanya dengan konfigurasi nginx

Plugin WordPress WP Rocket memberi nama folder cache artikel ber-URL huruf Korea dengan percent-encoding huruf kecil, sedangkan browser meminta URL yang sama dengan pengodean huruf besar. Situs WordPress berjalan di server ini.

Jika nginx membuat jalur file cache langsung dari URL permintaan, huruf besar-kecilnya tidak cocok sehingga file tidak ditemukan, dan permintaan diteruskan ke Apache dan PHP.

Nilai ini tidak bisa diubah menjadi huruf kecil hanya dengan konfigurasi nginx. [map] hanya memilih salah satu nilai yang ditetapkan dan tidak bisa mengubah string, dan sebelum instalasi, baik keluaran [nginx -V] maupun folder modul tidak memuat modul perl atau lua.

Jika URL yang perlu diubah hanya beberapa, tabel padanan [map] pun bisa menanganinya, tetapi tabel harus dibuat ulang dan di-reload setiap kali ada artikel baru. Jika setiap URL perlu diubah dengan aturan yang sama, satu fungsi [js_set] menangani juga URL artikel baru, tag, dan kategori.

[perl_set] dari modul perl juga bisa dipakai di titik yang sama, dan repositori punya paket yang berpasangan dengan nginx, tetapi dokumentasi resmi nginx menyebut modul perl sebagai modul eksperimental.

3️⃣ Instalasi nginx njs: dengan versi yang sama dengan nginx yang terpasang

Menginstal hanya dengan nama paket modul terlihat seperti hanya menambah njs, tetapi njs terbaru di repositori memerlukan nginx terbaru sehingga nginx ikut ditingkatkan. Pada pemeriksaan sebelum instalasi, perintah instalasi tanpa versi menampilkan rencana menaikkan nginx 1.28.0 ke 1.30.6.

Karena itu, periksa dulu versi nginx yang terpasang saat ini.

rpm -q nginx
nginx-1.28.0-1.el9.ngx.x86_64

Repositori memiliki paket njs tersendiri yang berpasangan dengan setiap versi nginx; dalam nomor versinya, bagian sebelum + adalah versi nginx dan bagian sesudahnya adalah versi njs.

dnf list --showduplicates nginx-module-njs | grep '1.28.0+'
nginx-module-njs.x86_64         1:1.28.0+0.9.4-1.el9.ngx           @nginx-stable
nginx-module-njs.x86_64         1:1.28.0+0.8.10-1.el9.ngx          nginx-stable
nginx-module-njs.x86_64         1:1.28.0+0.9.0-1.el9.ngx           nginx-stable
nginx-module-njs.x86_64         1:1.28.0+0.9.1-1.el9.ngx           nginx-stable
nginx-module-njs.x86_64         1:1.28.0+0.9.2-1.el9.ngx           nginx-stable
nginx-module-njs.x86_64         1:1.28.0+0.9.3-1.el9.ngx           nginx-stable
nginx-module-njs.x86_64         1:1.28.0+0.9.4-1.el9.ngx           nginx-stable

Versi yang berpasangan dengan nginx 1.28.0 ada enam, dari 0.8.10 sampai 0.9.4, dan baris @nginx-stable paling atas adalah versi yang sudah terinstal. Instalasi dilakukan dengan versi terbaru, 0.9.4, dengan menuliskan nomor versinya lengkap.

dnf install nginx-module-njs-1:1.28.0+0.9.4-1.el9.ngx

Versi nginx yang diperlukan paket yang terinstal bisa diperiksa dengan rpm.

rpm -q --requires nginx-module-njs | grep nginx
nginx-r1.28.0
rpm -ql nginx-module-njs | grep -v build-id
/usr/bin/njs
/usr/lib64/nginx/modules/ngx_http_js_module-debug.so
/usr/lib64/nginx/modules/ngx_http_js_module.so
/usr/lib64/nginx/modules/ngx_stream_js_module-debug.so
/usr/lib64/nginx/modules/ngx_stream_js_module.so
/usr/share/doc/nginx-module-njs
/usr/share/doc/nginx-module-njs/CHANGES
/usr/share/doc/nginx-module-njs/COPYRIGHT

File yang terinstal adalah modul HTTP, modul stream yang menangani TCP·UDP, versi debug masing-masing, dan alat baris perintah njs. Dalam pengaturan ini, file yang dimuat hanya satu, yaitu modul HTTP [ngx_http_js_module.so].

4️⃣ Pengaturan js_set: dari memuat modul sampai jalur file cache

Menginstal paket tidak membuat nginx memuat modul secara otomatis; nginx.conf memerlukan baris [load_module] di bagian paling atas. Menurut dokumentasi resmi, [load_module] adalah direktif konteks main sehingga ditempatkan di luar blok events·http.

📂 /etc/nginx/Folder konfigurasi
nginx.confload_module di paling atas — memuat modul
njs/rocket.jsFungsi lc — hanya percent-encoding yang diubah ke huruf kecil
conf.d/
rocket-njs.confBlok http — js_import · js_set
example.com.confBlok server — $rocket_uri di jalur file cache
# Bagian paling atas /etc/nginx/nginx.conf (di luar blok events·http)
load_module modules/ngx_http_js_module.so;

Fungsi konversi disimpan di file .js terpisah dari file konfigurasi, dan konfigurasi nginx memuat fungsi yang diekspor dengan export default di baris terakhir.

// /etc/nginx/njs/rocket.js — hanya percent-encoding %XX yang diubah ke huruf kecil
function lc(r) {
    return r.variables.request_uri.replace(/%[0-9A-F]{2}/g, function (m) { return m.toLowerCase(); });
}
export default { lc };

Fungsi membaca variabel [request_uri] dari objek permintaan r, mengubah ke huruf kecil hanya dua karakter setelah tanda persen yang berhuruf besar, lalu mengembalikannya. Huruf Latin dibiarkan apa adanya sehingga URL berbahasa Inggris yang bercampur huruf besar tidak berubah, dan aturannya sama dengan cara WP Rocket menamai folder cache.

# Di dalam blok http (file .conf di conf.d)
js_import rkt from /etc/nginx/njs/rocket.js;
js_set $rocket_uri rkt.lc;

rkt di [js_import] adalah nama untuk memanggil fungsi di dalam modul, dan [js_set] mengubah hasil fungsi itu menjadi variabel [$rocket_uri]. Menurut dokumentasi resmi, fungsi ini dijalankan saat variabel pertama kali dirujuk dalam permintaan dan hanya mendukung pemrosesan sinkron.

# Blok server — $request_uri di jalur file cache diganti $rocket_uri
set $rocket_file '/wp-content/cache/wp-rocket/example.com${rocket_uri}index$rocket_mobile-https.html';

Yang berubah hanya satu baris yang membuat jalur file cache ini; penentuan yang mengecualikan cookie login, kueri, dan permintaan POST dari cache tetap seperti semula.

5️⃣ Penerapan dan pemeriksaan: log galat dan header respons setelah reload

Jalankan uji konfigurasi terlebih dahulu, lalu reload jika lolos.

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
systemctl reload nginx

Baris [load_module] yang baru ditambahkan berlaku dengan reload tanpa restart. Log galat mencatat baris inisialisasi mesin virtual njs, dan tidak ada galat JavaScript.

grep 'js vm init' /var/log/nginx/error.log | head -1
2026/10/17 18:21:35 [notice] 27992#27992: js vm init njs: 0000559FDF6D0E00

njs di akhir baris adalah nama mesin yang sedang dipakai. Baris yang sama juga dicatat saat konfigurasi diuji dengan [nginx -t], jadi cocokkan dengan waktu reload.

curl -sI 'https://example.com/-/' | grep -i 'x-rocket\|content-type'
content-type: text/html
x-rocket-nginx-serving-file: HIT

Bahkan pada URL berhuruf Korea yang dikodekan dengan huruf besar, header penanda bahwa nginx menyajikan file cache tetap muncul. Permintaan dengan kueri atau cookie login, serta permintaan POST, tetap diteruskan ke PHP tanpa header penanda itu setelah penerapan.

6️⃣ Mengembalikan njs dan memperbarui nginx

Untuk mengembalikan, ganti [$rocket_uri] di jalur file cache menjadi [$request_uri], hapus file konfigurasi [js_import]·[js_set] dan baris [load_module], lalu jalankan uji konfigurasi dan reload.

# Blok server — kembali ke variabel semula
set $rocket_file '/wp-content/cache/wp-rocket/example.com${request_uri}index$rocket_mobile-https.html';

Paket boleh dibiarkan: tanpa baris [load_module], nginx tidak memuatnya, jadi hapus paket hanya jika ingin dihapus sepenuhnya.

dnf remove nginx-module-njs

Saat memperbarui nginx, paket njs juga harus naik ke versi yang berpasangan dengan nginx baru. Sebelum pembaruan, periksa dengan [dnf list --showduplicates] apakah pasangan njs untuk versi nginx baru ada di repositori.

🔢 FAQ & Konten yang Direkomendasikan

Dokumentasi resmi nginx menetapkan mesin njs bawaan sebagai akan dihentikan (deprecated) mulai versi 1.0.0 dan menyarankan mesin QuickJS yang mendukung ES2023 untuk konfigurasi baru. Mesin dipilih dengan direktif [js_engine qjs] yang tersedia sejak versi 0.8.6. Instalasi 0.9.4 dalam artikel ini diterapkan dengan mesin njs bawaan, dan peralihan ke QuickJS tidak diuji.

Ini adalah alat baris perintah mandiri untuk mengembangkan dan men-debug kode njs tanpa nginx (menurut dokumentasi resmi). Alat ini ikut terinstal dalam paket nginx-module-njs, dan saat versinya diperiksa dengan [njs -v], muncul 0.9.4, sama dengan modulnya.

Jika hanya menangani permintaan HTTP, [ngx_http_js_module] saja sudah cukup. Paket ini juga berisi [ngx_stream_js_module] yang menangani sesi TCP·UDP, dan dokumentasi instalasi resmi mengarahkan untuk memuat modul yang diperlukan di antara keduanya dengan [load_module].

🧭 Artikel terkait WP Rocket 16 artikel · 3 alat
📋 Panduan Pengaturan WP Rocket 📄 WP Rocket MCP Server 📄 WP Rocket dan URL bahasa Korea 📄 nginx njs 📄 Cache multibahasa WP Rocket 📄 Cache gclid
📄 Tes Kecepatan WP Rocket 📝 Plugin Cache·Optimasi 📝 Contoh Peningkatan Kecepatan
📋 Cache: Definisi dan Semua Bidang 📄 Cache Website & Cache Internal Server
📋 BEST Hosting TOP 7 📄 Hosting Cepat 2026
🛠️ Deteksi WordPress 🛠️ Cek domain WHOIS 🛠️ Cek IP Saya
Apa itu WP Rocket: lima klaim artikel yang merekomendasikan FlyingPress dicocokkan dengan layar resmi dan pengukuran server
WordPress · WP Rocket
Apa itu WP Rocket: fitur utama, kekurangan, dan kelebihan plugin cache serba lengkap
Ringkasan cara WP Rocket menyajikan halaman dari file cache beserta harganya.
Lihat artikel →Konten saat ini
Panduan Pengaturan WP Rocket: Pengaturan Dasar per Menu dan Promo Code 20%
WordPress · WP Rocket
Panduan Pengaturan WP Rocket: Pengaturan Dasar per Menu dan Promo Code 20%
Artikel yang merangkum pengaturan dasar WP Rocket per menu dan harganya.
Lihat artikel →Konten saat ini
WP Rocket MCP Server: Mengelola Cache dan Pengaturan dengan Alat AI
WordPress · MCP
WP Rocket MCP Server: Mengelola Cache dan Pengaturan dengan Alat AI
Cara mengelola cache dan pengaturan WP Rocket dari alat AI.
Lihat artikel →Konten saat ini
Diagram alur permintaan URL bahasa Korea di WP Rocket
WordPress · WP Rocket
WP Rocket dan URL bahasa Korea
Penyebab nginx tidak menemukan file cache karena perbedaan huruf besar-kecil pada encoding permintaan URL bahasa Korea, dan cara memperbaikinya dengan njs.
Lihat artikel →Konten saat ini
Diagram variabel nginx njs dan jalur file cache
Server · nginx
nginx njs: memasang modul, mengatur js_set, dan menerapkan reload untuk membuat variabel JavaScript
Cara memasang modul njs yang membuat variabel dengan fungsi JavaScript di dalam konfigurasi nginx, lalu menerapkan variabel js_set dengan reload.
Lihat artikel →Konten saat ini
Diagram alur penyimpanan artikel dengan cache multibahasa WP Rocket
WordPress · WP Rocket
Cache multibahasa WP Rocket
Penyebab cache versi terjemahan terhapus bersama seluruh folder bahasa saat menyimpan draf, dan kode untuk mencegahnya.
Lihat artikel →Konten saat ini
Alur permintaan berkueri iklan yang diteruskan ke server asal saat CDN tidak punya salinan, berpindah dari nginx ke Apache, lalu WP Rocket membuang kueri iklan dan menjawab dengan file cache yang sama
Server · Cache
Cache gclid: kueri klik iklan, kunci cache halaman, dan byte pertama yang diukur
Mengukur dengan byte pertama bagaimana kueri gclid di akhir URL klik iklan diabaikan dan respons diberikan dari file cache URL tanpa kueri.
Lihat artikel →Konten saat ini

ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Buktikan bahwa Anda manusia: 1   +   9   =