perintah-perintah lain yang bisa digunakan dalam blok sub_filter atau bersamaan dengan sub_filter di Nginx, ada beberapa perintah tambahan yang bisa digunakan untuk mengontrol cara Nginx memproses dan mengirimkan respons. Berikut beberapa yang mungkin berguna:
1. add_header (Menambahkan Header di Respons)
Kamu bisa menambahkan header HTTP tambahan dalam respons yang sudah dimodifikasi oleh sub_filter:
nginx
location / {
proxy_pass http://backend;
sub_filter "old-text" "new-text";
sub_filter_once off;
add_header X-Custom-Header "Filtered by Nginx";
}
Ini akan menambahkan header
X-Custom-Header: Filtered by Nginxpada respons.
2. expires (Mengontrol Cache di Browser)
Jika ingin mengontrol cache browser terhadap konten yang sudah dimodifikasi:
nginx
location / {
proxy_pass http://backend;
sub_filter "old-text" "new-text";
sub_filter_once off;
expires 1h;
}
Ini akan mengatur agar respons hanya disimpan dalam cache browser selama 1 jam.
3. etag (Mengaktifkan ETag untuk Kontrol Cache)
Mengaktifkan ETag bisa membantu browser mengetahui apakah konten telah berubah:
nginx
etag on;
Jika diaktifkan, browser bisa memeriksa apakah konten sudah berubah sebelum mengunduh ulang.
4. gzip (Mengaktifkan Kompresi Respons)
Agar hasil dari sub_filter tetap ringan, kamu bisa mengaktifkan kompresi gzip:
nginx
gzip on;
gzip_types text/html text/plain text/css application/javascript;
Ini akan mengompresi konten yang sudah dimodifikasi oleh
sub_filtersebelum dikirim ke klien.
5. proxy_set_header (Mengubah Header Saat Menggunakan proxy_pass)
Jika sub_filter digunakan dalam proxy, kamu bisa menyesuaikan header yang dikirim ke backend:
nginx
location / {
proxy_pass http://backend;
sub_filter "old-text" "new-text";
sub_filter_once off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
Ini memastikan backend menerima header yang benar dari Nginx.
6. rewrite (Mengubah URL Sebelum Diproses)
Jika kamu ingin mengganti bagian dari URL sebelum diproses lebih lanjut:
nginx
rewrite ^/old-path(.*)$ /new-path$1 redirect;
Mengarahkan
old-pathkenew-pathsambil mempertahankan bagian lain dari URL.
7. set (Menyimpan Nilai dalam Variabel)
Kamu bisa menggunakan variabel dalam sub_filter untuk membuatnya lebih dinamis:
nginx
set $new_domain "newsite.com";
sub_filter "oldsite.com" $new_domain;
Ini mengganti
oldsite.comdengannewsite.com, tetapi lebih fleksibel karena menggunakan variabel.
Kesimpulan
Selain sub_filter, kamu bisa menggunakan perintah-perintah ini dalam konfigurasi Nginx:
add_header→ Menambahkan header HTTPexpires→ Mengontrol cache browseretag→ Mengaktifkan ETag untuk kontrol cachegzip→ Mengaktifkan kompresi responsproxy_set_header→ Menyesuaikan header dalam proxyrewrite→ Mengubah URL sebelum diprosesset→ Menyimpan nilai dalam variabel
Kalau ada kasus spesifik yang ingin kamu atur, kasih tahu aja!
Cara Penulisan rewrite di Nginx
Perintah rewrite di Nginx digunakan untuk mengubah URL sebelum diproses lebih lanjut. Format dasarnya adalah:
nginx
rewrite regex replacement [flag];
regex→ Pola ekspresi reguler untuk mencocokkan URL.replacement→ URL pengganti setelah aturanrewritediterapkan.flag(opsional) → Menentukan bagaimana aturanrewritebekerja.
Contoh Penggunaan rewrite
Berikut beberapa contoh aturan rewrite yang umum digunakan:
1. Redirect URL ke Path Lain
Mengalihkan semua akses dari /old-path ke /new-path tanpa mengubah domain.
nginx
rewrite ^/old-path$ /new-path redirect;
Jika pengguna mengakses
example.com/old-path, mereka akan diarahkan keexample.com/new-path.
2. Redirect dengan Query String
Jika ingin mempertahankan query string dari URL lama ke yang baru:
nginx
rewrite ^/search/(.*)$ /newsearch?q=$1 redirect;
Jika pengguna membuka
example.com/search/keyword, akan dialihkan keexample.com/newsearch?q=keyword.
3. Redirect 301 (Permanen)
Untuk pengalihan permanen, gunakan permanent:
nginx
rewrite ^/old-page$ /new-page permanent;
Pengguna dan mesin pencari akan diarahkan secara permanen ke halaman baru.
4. Redirect dengan return (Alternatif)
Jika hanya ingin mengalihkan tanpa perlu memeriksa banyak aturan rewrite, gunakan return:
nginx
return 301 https://example.com/new-page;
Lebih efisien daripada
rewriteuntuk redirect sederhana.
5. Menghapus .php dari URL
Jika ingin pengguna mengakses example.com/page tetapi di belakangnya tetap page.php:
nginx
rewrite ^/(.*)/?$ /$1.php last;
Jika pengguna membuka
example.com/about, Nginx akan meneruskan keexample.com/about.phptanpa mengubah URL di browser.
6. Menambahkan atau Menghapus Tailing Slash (/)
Menambahkan trailing slash ke semua URL yang tidak memiliki / di akhir:
nginx
rewrite ^(.+[^/])$ $1/ permanent;
Sebaliknya, untuk menghapus / di akhir URL:
nginx
rewrite ^/(.*)/$ /$1 permanent;
7. Menggunakan rewrite di dalam server atau location
Jika ingin menerapkan rewrite dalam blok server atau location:
nginx
server {
listen 80;
server_name example.com;
location /old {
rewrite ^/old$ /new permanent;
}
}
Semua akses ke
example.com/oldakan diarahkan keexample.com/new.
Penjelasan flag dalam rewrite
| Flag | Fungsi |
|---|---|
last | Menghentikan proses rewrite dan lanjut ke konfigurasi location yang cocok. |
break | Menghentikan eksekusi aturan rewrite selanjutnya dalam lokasi yang sama. |
redirect | Mengembalikan kode status 302 (Temporary Redirect) ke browser. |
permanent | Mengembalikan kode status 301 (Permanent Redirect) ke browser. |
Kesimpulan
- Gunakan
rewriteuntuk mengubah URL sebelum diproses oleh server. - Gunakan
redirectuntuk pengalihan sementara (302) danpermanentuntuk pengalihan permanen (301). - Gunakan
returnjika hanya butuh pengalihan sederhana tanpa regex. - Pastikan aturan
rewritetidak bertabrakan dengan aturan lain diserverataulocation