Mengaktifkan Friendly URL XenForo dalam Nginx

Nginx bisa menjadi solusi terbaik untuk mengganti Apache sebagai web server forum XenForo anda. Tapi kekurangannya adalah tidak semudah Apache untuk settingnya, terutama untuk fitur seperti Permalink/Friendly URL karena tidak adanya dukungan htaccess. Jadi kalau kita ingin mengaktifkan fitur ini di forum jelas akan error 404 Not Found karena Nginx sendiri tidak diinstruksikan menerjemahkan format url barunya.

Solusinya? Tambahkan saja format rewrite url barunya dalam konfigurasi domain website anda di Nginx. Lokasinya bisa di:

  • Install manual: /etc/nginx/sites-enabled/[nama-domain-anda] atau /etc/nginx/sites-available/[nama-domain-anda]
  • Webuzo: /usr/local/apps/nginx/etc/conf.d/common

Ganti apa yang ada dalam kurung dengan alamat website anda.

Saya menggunakan editor teks nano untuk menambahkannya:

location / {
            index index.php index.html index.htm;
            try_files $uri $uri/ /index.php?$uri&$args;
         
        }
 
        location /internal_data/ {
        internal;
        allow 127.0.0.1;
        deny all;
        }

        location /library/ {
        internal;
        allow 127.0.0.1;
        deny all;
        }

Letakkan dalam bagian location, sedangkan kode tambahan untuk internal_data dan library fungsinya agar cuma bisa diakses dari servernya sendiri bukan dari luar.

Kalau sudah maka restart saja Nginx:

service nginx restart

Selesai, dan bisa anda uji coba apakah sudah berhasil atau belum.

Oh ya, untuk WordPress setelah Permalinknya ada di lokasi yang sama dengan format yang sedikit berbeda.

15 Comments

  1. Halo mas Chandra,
    saat ini saya masih menggunakan vestacp dan ingin sekali menggunakan webserver nginx alias tanpa cp, saya sudah coba instal di vps dari xvmlabs 512 tapi masih ragu apakah konfigurasi yang saya buat sudah betul, jika berkenan mohon mas Chandra untuk mengkoreksi.
    ==========================
    konfigurasi nginx.conf :
    ==========================

    user  nginx;
    worker_processes  auto;
    worker_rlimit_nofile 1024;
    error_log  /var/log/nginx/error.log crit;
    pid        /var/run/nginx.pid;
    
    events {
        worker_connections  2048;
        use epoll;
    }
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log off;
        server_tokens off;
        keepalive_timeout 30;
        keepalive_requests 10000;
        reset_timedout_connection on;
        client_body_timeout 10;
        send_timeout 2;
    
        gzip                on;
        gzip_comp_level     9;
        gzip_min_length     512;
        gzip_buffers        8 64k;
        gzip_types          text/plain text/css text/javascript
                            application/x-javascript
    			application/javascript;
        gzip_proxied        any;
    
        include /etc/nginx/conf.d/*.conf;
    }

    =========================
    konfigurasi default.conf :
    =========================

    server {
        listen       80;
        server_name  domain.com;
        return       301 http://www.domain.com$request_uri;
    }
    
    server {
        listen       80;
        server_name  www.domain.com;
        root   /usr/share/nginx/html;
    
        location / {
            index index.php index.html index.htm;
    	try_files $uri $uri/ /index.php?$uri&$args;
        }
    	location /internal_data/ {
            internal;
            allow 127.0.0.1;
            deny all;
            }
    
            location /library/ {
            internal;
            allow 127.0.0.1;
            deny all;
            }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        location ~ \.php$ {
    	try_files $uri =404;
    	fastcgi_pass 127.0.0.1:9000;
    	fastcgi_index index.php;
    	fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    	include fastcgi_params;
        }
    	
        location ~* \.(?:ico|css|gif|jpe?g|js|png|swf)(\?.+)?$ {
            access_log              off;
            log_not_found           off;
            expires                 1y;
        }
    }

    ===============================
    ===============================
    dua konfigurasi di atas hasil kombain dari config yang ada di vestacp dan gogling hehehe,,saya coba jalankan dengan xenforo memang tanpa masalah tapi itu tadi apakah konfigurasi di atas ada yang kurang atau tidak perlu untuk optimasi. terima kasih sebelumnya mas.

    1. Wah… kebagian di XVM Labs juga mbak? Saya cuma dapat 1. 🙁

      Saya komentari lagi ya mbak:

      1. Di nginx.conf tepatnya di worker_processes ini fungsinya menentukan berapa banyak proses nginx yang akan dijalankan. Kalau CPU VPSnya terbatas jangan banyak – banyak, bisa ngehang nanti servernya. Mungkin auto sudah cukup pintar sih, tapi saya limit secara manual biasanya. Aturan pribadi saya 1 vCPU = 1 worker. Ini penjelasan saja sih, biar anda paham gunanya apa.
      2. Dibawahnya pada bagian GZIP saya anjurkan gzip_comp_level agar jangan 9, cukup 6 saja. Kenapa? Semakin tinggi tingkat kompresi maka CPU servernya semakin meningkat juga. Dimana selisih tingkat 6 dan 9 itu selisihnya antara 0-5% dari pengalaman jadi rasanya mubazir, ini akan terasa kalau pengunjung situsnya sudah banyak.
      3. Masih mengenai GZIP, di gzip_types tidak ada ruginya dilengkapi jenis filenya menjadi text/plain text/css text/javascript application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss;, pokoknya yang jenisnya teks akan sangat terbantu kalau dikompresi. Jangan tipe gambar, audio dan video dimasukkan disini ya. Percuma dan malah bikin berat server.
      4. Pada default.conf di blok server{}, anda pakai www.namadomain.com bukan naked domain namadomain.com saja ya? Wah… saya salah saran di pertanyaan anda mengenai DNS record sebelumnya. Kebalik berarti.

      Ini saya cek sekilas, mungkin ada yang terlewat. Saya juga belajaran, harap maklum kalau ada kesalahan. Dikoreksi juga silahkan. 🙂

      Sebenarnya setting default Nginx sudah cukup bagus kok mbak. Mungkin optimasi di hal – hal lainnya lebih terasa bedanya. Pasang CloudFlare atau Incapsula sudah dicoba?

      1. terima kasih sarannya mas chandra luar biasa responnya hehehe…itu xvm labs dapat lama mas, di xvm lab ini pernah kejadian dia hapus semua data tanpa pemberitahuan karena alasan maintenance tapi untungnya xvm labs saya pakai buat belajar saja.
        untuk konfigurasi default.conf pada blok server sepertinya sudah ada untuk naked domainnya (paling atas):

        server {
            listen       80;
            server_name  domain.com;
            return       301 http://www.domain.com$request_uri;
        }

        untuk sisi optimasi, saya coba cek di gtmetrix dapat anjuran : avoid landing page redirects, jadi saya hapus konfigurasi server block paling atas di file default.conf dan tes lagi memang naik speed loadingnya tapi masalahnya ketika saya coba ketik ip server vps nggak berubah otomatis ke www.domain.com tapi tetap yg muncul ip address, sebelum konfigurasi server block paling atas saya hapus semua normal, saat ketik ip address otomatis berubah jadi www.domain.com.
        mungkin mas pernah menemui kasus seperti saya.

      2. Wogh… untung saya ga pernah merasakan yang itu mbak, memang XVM Labs ini ga ada SLAnya. Jadi buyer beware karena ga ada jaminan apapun.

        Oh, anda lebih suka pakai www atau non-www mbak? Memang dari kode anda sebelumnya itu sudah diurus, jadi kalau ada yang mengakses versi non-www akan otomatis dialihkan ke versi www-nya.

        Balik lagi, anda ingin saat mengetikkan alamat IP server yang terbuka websitenya ya? Yang anda cari itu sebenarnya bernama Reverse DNS mbak. Ini settingnya lebih mudah di control panel VPSnya:

        1. SolusVM: Buka tab Network nanti ada opsi edit RDNS, masukkan disini.
        2. KiwiVM: Pada Main Controls dibagian bawah ada opsi PTR Records (Reverse DNS), klik Set new record. Isikan nama domain anda.

        Soal hasil GTMetrix… aslinya saya malah tidak pernah setting alamat IP ke nama domain sih mbak. Kurang paham manfaatnya apa kalau cuma buat blog biasa, ada pendapat mbak? Soalnya saya cek pakai Servernesia ini juga tidak muncul masalah yang anda alami untuk Landing page redirect, ini kan disebabkan adanya redirect saat halaman tersebut diakses. Nah… ini sudah saya atur dari DNS record yang saya jelaskan sebelumnya dimana setiap permintaan www saya alihkan langsung ke non-www memanfaatkan CNAME tanpa perlu akses ke hostingnya. Ini pemahaman saya sih, mungkin belum akurat. 🙂

  2. ahh lupa dengan pertanyaan terakhir mas chandra untuk cloudflare dan incapsula, sudah pernah pakai mas untuk versi gratisnya hehe tapi sekarang saya cukup pake gabungan php-fpm dan zend opcache saja 🙂 itu sudah terbantu hehehe.

    1. Hehe, iya mbak. Tapi saya pakai sebenarnya selain memanfaatkan layanan reverse proxy dan CDNnya lebih ke blokir bot – bot yang datang ke situs. Otomatis soalnya. Bisa menghabiskan resource hosting kalau dibiarkan tanpa batas. PHP tetap saja membuat halaman baru untuk bot, nanti konten juga diambil. Tapi anda sudah pakai Opcache ya, mungkin tidak terasa. Kalau memori besar mungkin bisa coba Memcache mbak, biar dimuat dari RAM semua. Hehe. 😀

      1. mas chandra, menyambung diskusi diatas berhubung nggak ada opsi balasnya 🙂 sebelumnya saya sudah atur PTRnya, nggak ada masalah saat ketik ip address muncul websitenya cuma alamat di addres bar browser yang nampak tetap ip address nggak otomatis ke www.domain.com, saat pakai vestacp otomatis dari ip addres ke domain, jadi sementara saya pakai konfigurasi ini diserver block :

        server {
            listen       80;
            server_name  domain.com;
            return       301 http://www.domain.com$request_uri;
        }

        cuma masalahnya dengan konfigurasi di atas muncul notfikasi di gtmetrix avoid landing page redirects dan memang ada peningkatan speed kalau tanpa konfigurasi diatas tadi. btw trims untuk super duper responnya 🙂

      2. Haha 😀 Memang saya batasi komentar bersarangnya mbak, kalau tidak nanti bisa mepet kanan tulisannya jadi satu baris satu kata. Belajar dari pengalaman ini. Susah bacanya nanti. 😛

        Coba konfigurasi ini ya mbak:

        server {
            listen 192.168.1.1:80;
            server_name 192.168.1.1 servernesia.com;
            rewrite  ^/(.*)$  https://servernesia.com/$1 permanent;
        }

        Letakkan diawal. Gantikan alamat IPnya dengan milik anda dan tentu saja domainnya. 😉

        Sama – sama mbak, saya juga belajar dari pertanyaan anda. Kalau ga ada kasusnya mana mungkin saya cari solusi. Hehe.

        Semoga sukses.

  3. sudah saya coba mas seperti konfigurasi di atas berikut penampakannya :
    ======================
    ======================

    server {
        listen 58.162.62.34:80;
        server_name 58.162.62.34 domain.com;
    
        rewrite  ^/(.*)$  http://www.domain.com/$1 permanent;
    }
    
    server {
        listen       80;
        server_name  www.domain.com;
        root   /usr/share/nginx/html;
    
        location / {
            index index.php index.html index.htm;
    	try_files $uri $uri/ /index.php?$uri&$args;
        }
    	location /internal_data/ {
            internal;
            allow 127.0.0.1;
            deny all;
            }
    
            location /library/ {
            internal;
            allow 127.0.0.1;
            deny all;
            }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        location ~ \.php$ {
    	try_files $uri =404;
    	fastcgi_pass 127.0.0.1:9000;
    	fastcgi_index index.php;
    	fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    	include fastcgi_params;
        }
    	
        location ~* \.(?:ico|css|gif|jpe?g|js|png|swf)(\?.+)?$ {
            access_log              off;
            log_not_found           off;
            expires                 1y;
        }
    }

    ====================
    ====================

    ip vps di address bar browser memang berubah jadi domain tapi websitenya nggak bisa ke load muncul notifikasi error : The page isn’t redirecting properly. sudah restart php-fpm dan nginx masih muncul error yg sama.

    1. aaahh solved dengan sedikit perubahan mas :

      server {
      listen 80;
      server_name 58.162.62.34;
      
      rewrite ^/(.*)$ http://www.domain.com/$1 permanent;
      }

      thanks berat mas chandra 🙂

      1. Sep mbak. 🙂

        Jadi di listen tidak perlu alamat IP servernya ya. Saya juga belajar dari sini, tahu teorinya tapi tidak ada kebutuhan untuk prakteknya. 😛

  4. buka lagi topik lama 😀
    di setingan nginx.conf saya nggak masukan code :

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;

    menurut mas chandra apa perlu dimasukkan? kurang tahu apa fungsi trio code di atas, banyak dari artikel yang saya lihat di bagian optimasi nginx masukkan code ini, karna droplet yang serba minimum jadi saya ekstra hati2 masukkan kode baru 😀
    trims sebelumnya.

Tinggalkan Balasan ke Chandra Batalkan balasan

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