Utilisasi Web Server Nginx yang sangat tangguh mengatasi konten statik seperti file gambar dapat dilakukan dengan tetap menggunaan Apache sebagai backend yang menhandle semua request lain. Dengan demikian kita tetap bisa menggunakan rewrite dari Apache tanpa harus melakukan modifikasi di file konfigurasi Nginx.
Artikel ini akan memberikan panduan untuk melakukan implementasi Nginx Frontend dengan Apache Backend, pada tahapan ini diasumsikan bahwa anda telah dapat melakukan instalasi dan konfigurasi awal baik untuk Nginx maupun untuk Apache.
Artikel ini dilakukan pada server CentOS 64 bit, apabila anda menggunakan server dengan distribusi yang berbeda, harap diperhatikan perbedaan path dan perintah.
Nginx akan melayani request http terhadap domain terkait, dengan demikian entry pada Name Server diarahkan ke IP Address yang disetup di Virtual Host Nginx. Pada contoh kasus di artikel ini, konfigurasi virtual host nginx akan menggunakan ip publik dengan port 80, sementara apache akan menggunakan ip localhost pada port 8080.
Untuk beberapa kepentingan seperti log apache yang membutuhkan IP Address pengunjung dan bukan IP Address Nginx, kita akan menggunakan modul Apache rpaf yang informasi lebih lanjutnya dapat anda akses mealalui situs http://stderr.net/apache/rpaf/.
Lakukan instalasi Modul Apache rpaf;
yum install -y httpd-devel.x86_64 cd /usr/src/ wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz tar xzf mod_rpaf-0.6.tar.gz /usr/sbin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
Pastikan bahwa mod_rpaf-2.0.so sudah ada di dalam direktori /etc/httpd/modules/ kemudian edit file httpd.conf agar meload mod_rpaf ketika httpd dinyalakan;
vi /etc/httpd/conf/httpd.conf # Tambahkan baris berikut LoadModule rpaf_module modules/mod_rpaf-2.0.so
Apache harus direstart untuk mengaktifkan perubahan terkait, /etc/init.d/httpd restart
Buat direktif server {} di dalam file konfigurasi Nginx, dalam hal ini adalah /usr/local/nginx/conf/nginx.conf, posisi konfigurasi virtual host Nginx akan tergantung kepada konfigurasi awal yang anda miliki.
server { listen ip.publik.anda:80; server_name domain.com www.domain.com; access_log logs/domain.com-nginx-access.log main; location / { proxy_pass http://127.0.0.1:80/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } # Static files location location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ { root /path/ke/home/direktori/httpd/domain.com; } }
Pada konfigurasi di atas, Nginx hanya akan melayani request terhadap file statik yang ekstensionnya disebutkan, request di luar itu akan diarahkan ke Apache yang berjalan di 127.0.0.1 Port 8080 melalui direktif proxy_pass.
Agar direktori logs nginx sama dengan direktori logs apache, silahkan hapus direktori logs di dalam /usr/local/nginx, dan buat symlink logs ke /var/log/httpd.
cd /usr/local/nginx/ rm -rf logs ln -s /var/log/httpd logs
Virtual host apache tetap harus disetup, namun dengan menggunakan port 8080 dan IP Address 127.0.0.1, pastikan bahwa Apache hanya berjalan di port 8080 sehingga tidak bentrok dengan port 80 yang digunakan oleh Nginx.
vim /etc/httpd/conf/httpd.conf Listen 127.0.0.1:8080
Kemudian masukkan direktif virtual host untuk domain.com di file yang sama;
NameVirtualHost 127.0.0.1:8080 <VirtualHost 127.0.0.1:8080> ServerAdmin [email protected] ServerName domain.com ServerAlias www.domain.com DocumentRoot /var/www/html/domain.com RPAFenable On RPAFsethostname On RPAFproxy_ips 127.0.0.1 RPAFheader X-Real-IP <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/html/domain.com> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> LogLevel warn ErrorLog logs/domain.com-error.log CustomLog logs/domain.com-access.log combined </VirtualHost>
Pada contoh di atas konfigurasi RPAF berada di dalam direktif virtual host, apabila direktif ini tidak ada maka yang tercatat di log Apache adaah IP Address server anda sendiri, karena requestnya berasal dari Nginx (proxy) dan bukan dari user langsung.
Untuk impelementasi setup silahkan direstart service Nginx dan Apache.