title: "Compile Nginx Latest Stable Version Dari Source Code"
description: Bukan rahasia umum bahwa sampai saat ini web server yang paling banyak digunakan adalah Apache, tapi bagaimana dengan web server lain? Apakah tidak se-powerful Apache?
summary: Bukan rahasia umum bahwa sampai saat ini web server yang paling banyak digunakan adalah Apache, tapi bagaimana dengan web server lain? Apakah tidak se-powerful Apache?
> _**CATATAN**: Artikel ini dibuat di tahun 2011, jadi Anda perlu beradaptasi dalam mengikuti tutorial ini. Terelebih lagi, saat ini mayoritas distribusi Linux sudah banyak meninggalkan `sysVinit` beralih menggunakan `SystemD`._
Nginx (pengucapan **"Engine X"**) adalah _web server_ / _reverse proxy_ dan _e-mail_ (**IMAP**/**POP3**) _proxy_ yang ringan dengan kinerja tinggi , dilisensikan di bawah **lisensi BSD**. Berjalan pada **UNIX**, **GNU/Linux**, **Solaris**, **Varian BSD** seperti **Mac OS X**, dan **Microsoft Windows**.
2.**Mudah digunakan**: Konfigurasi file jauh lebih mudah dimengerti dan dimodifikasi daripada konfigurasi web server lainnya seperti Apache. Beberapa baris saja sudah cukup untuk menciptakan sebuah `virtual host` yang cukup lengkap.
3.**Plug-in system** ( disini disebut sebagai "`modules`" )
4. dan yang paling penting, **Open Source** (BSD-like license)
Beberapa contoh website besar yang menggunakan Nginx entah itu sebagai web server atau sebagai _reserve proxy_ sebagai backend Apache antara lain : **kaskus.us**, **indowebster.com**, **wordpress.com**, **sourceforge.net**, **github.com**, dll.
Dalam proses instalasi web server, dibutuhkan beberapa _tools_ dan parameter yang harus kita putuskan pada saat kompilasi, dan beberapa konfigurasi tambahan yang harus dilakukan dan disesuaikan dengan sistem kita.
Nah, kali ini kita memilih untuk _men-download__source code_ aplikasi dan menginstalnya secara manual daripada menginstal menggunakan _package manager_. Ada beberapa alasan kenapa orang memilih melakukan instalasi secara manual :
1. Mengenal lebih jauh bagaimana sistem (terutama _web server_) yang kita gunakan itu bekerja.
Disamping itu jarang repositori yang menawarkan untuk _men-download_ dan menginstall Nginx menggunakan _package manager_ (`yum`|`apt`|`yast`) untuk versi yang terbaru (kecuali pada distribusi _rolling-release_ seperti **Arch Linux**). Kebanyakan menyediakan versi lama yang kurang _up-to-date_ alias basi. x_x.
Berikut ini ada _capture screen video_ yang sudah saya buat sebelumnya. Mungkin bisa membantu dalam proses installasi. (tidak perlu sama persis, yang penting tau proses dan cara kerja-nya)
Pertama, mari kita download web server kita dari [http://nginx.org/download/nginx-1.0.5.tar.gz](http://nginx.org/download/nginx-1.0.5.tar.gz) (saat saya menulis artikel ini versi stable terbarunya adalah `1.0.5`).
1. Sebelum proses installasi, lebih baik cek apakah `port 80` sedang digunakan atau tidak. Saya menggunakan distro **BackTrack** dan secara default **Apache** menggunakan `port 80` pada saat _startup_. `/etc/init.d/apache2 stop` atau `killall apache2`.
2. Nginx adalah program yang dibuat menggunakan **bahasa C**, jadi untuk dapat menggunakannya pertama-tama kita harus punya _tools_ seperti **GNU Compiler Collection (GCC)** pada komputer kita. **GCC** biasanya sudah terinstall pada kebanyakan Linux distro.
Untuk memastikannya, jalankan saja perintah "`gcc`" (tanpa quote) melalui terminal. Jika anda mendapatkan _output__"gcc: no input files"_ berarti GCC sudah terinstall pada komputer anda. Jika tidak, anda perlu menginstallnya terlebih dahulu.
Secara default, **HTTP rewrite module** onomatis ikut terinstall saat instalasi default Nginx. Module ini memerlukan **PCRE (Perl Compatible Regular Expression) library** karena **Rewrite** dan **HTTP Core modules** dari Nginx menggunakan PCRE sebagai syntax _regular expression_ mereka.
Pilihan kita jatuh pada opsi pertama karena nantinya kebanyakan situs yang digunakan sangat membutuhkan _rewrite module_ tersebut. Maka setelah melakukan instalasi PCRE, kita harus melakukan konfigurasi kembali.
Setelah ini, maka kita dapat melakukan **start**, **stop**, **restart** atau **reload** proses Nginx melalui _script_ tersebut. Mari kita coba jalankan Nginx:
Kemudian sebelum menjalankan `php-fastcgi` tersebut, kita bangun dulu struktur website yang akan kita gunakan. (saya memilih direktori `/var/www/nginx`)
```bash
mkdir -p /var/www/nginx; cd nginx
```
buat file dengan nama `info.php` berisi `phpinfo();` (sekedar melakukan testing apakah PHP sudah berjalan atau belum)
```bash
echo "<?php phpinfo(); ?>" > info.php
```
kemudian edit konfigurasi Nginx agar sesuai dengan struktur website yang sedang kita bangun.
**Exploit** : Buat file `apaaja.gif` menggunakan **GIMP**. Pada kotak komentar isi dengan _script PHP_`<?php phpinfo(); ?>` dan letakan pada direktori nginx server root (jika dalam artikel kali ini `/var/www/nginx/apaaja.gif`).
Secara normal, jika kita akses dari browser `http://localhost/apaaja.gif` akan nampak sebagai gambar `.gif` biasa. Tapi coba akses url dengan tersebut dari `http://localhost/apaaja.gif/terserah.php` maka hasilnya luar biasa :
Tentu saja `http://localhost/apaaja.gif/terserah.php` sebenarnya tidak ada. Tapi tiap request yang diakhiri dengan `.php` akan **DIEKSEKUSI** sebagai script PHP oleh Nginx melalui fitur `cgi.fix_pathinfo` sehingga Nginx mengeksekusi file `.gif` tersebut sebagai script PHP!
Berikut ini _module-module_ yang **otomatis aktif** saat command `./configure` dijalankan, tambahkan perintah-perintah di bawah untuk _me-disable_ module tersebut:
`--without-http_access_module`: Menonaktifkan _module_ pembatasan akses yang memungkinkan kita untuk konfigurasi akses untuk **IP range** tertentu. misal : `deny 192.168.1.1/24`.
`--without-http_map_module`: Module ini memungkinkan kita untuk mengklasifikasikan suatu nilai menjadi nilai yang berbeda, menyimpan hasilnya dalam bentuk _variabel_.
Berikut ini module-module yang tidak aktif saat command `./configure` dijalankan, tambahkan perintah-perintah di bawah untuk _me-enable module_ tersebut:
`--with-http_realip_module`: Mengaktifkan _module_ untuk membaca alamat IP yang sebenarnya dari sebuah request (biasanya didapat dari **HTTP header**_trusted proxy_).
`--with-http_image_filter_module`: Mengaktifkan _module_ yang memungkinkan kita untuk modifikasi gambar. Catatan: Perlu menginstal `libgd`_library_ untuk _module_ ini.
`--with-http_secure_link_module`: Mengaktifkan _module_ untuk memeriksa request URL dengan _security token_ yang dibutuhkan. (Mantap juga buat antisipasi **CSRF**)
Menambahkan third-party module yang bisa di download dari internet. Misal dari [http://wiki.nginx.org/3rdPartyModules](http://wiki.nginx.org/3rdPartyModules) (asli keren2).
Seperti yang kita lihat, perintah yang cukup mudah untuk konfigurasi sebuah web server. Pada umunya kita hanya perlu untuk menambahkan **module SSL** untuk konten **HTTPS**, dan **"Real IP"** untuk mengambil alamat IP pengunjung jika menggunakan _proxy_ atau kita menjalankan **Nginx** sebagai _backend server_ dengan web server lain.