Kolaborasi antara Nginx, Apache24, dan Php-fpm di Freebsd 10.3
Seperti banyak diketahui bahwa Nginx sebagai aplikasi webserver belakangan ini semakin banyak dilirik dan banyak peminatnya dikarenakan performanya sangat baik. Akan tetapi dalam hal sebagai server admin, nginx sedikit merepotkan karena setiap aplikasi memiliki directive sendiri-sendiri sesuai dengan karakteristik aplikasi tsb, utamanya dalam handle rewrite url. Sedangkan Apache sangat fleksible dari sisi server admin, cukup konfigurasi standar, setelah itu tinggal admin aplikasi menyesuaikan dengan memanfaatkan htaccess file. Intinya, nginx webserver lebih bagus performa+minimal konsumsi ram sedangkan apache boros ram+ performa kurang baik.Saya sebagai admin server terkadang mengalami kendala dengan beberapa aplikasi yang masih kaku terpaksa harus memakai webserver apache. Untuk inilah saya coba mengaplikasikan kolaborasi webserver antara nginx+apache+php-fpm dengan harapan performa yang dihasilkan akan lebih baik daripada hanya menggunakan webserver apache.
Instal php56 dan php-fpm
Lakukan instalasi php56 dan php56-extentions, pada saat “make config” fitur fpm diaktifkan.
# cd /usr/ports/lang/php56 # make config # make install clean BATCH=YES
# cd /usr/ports/lang/php56-extensions # make config # make install clean BATCH=YES
Copy dan edit file php.ini
# cd /usr/local/etc/ # cp php.ini-development php.ini
Edit file “php.ini” sesuaikan dengan spesifikasi server anda.
Install NGINX Webserver
Install nginx via port:
# cd /usr/port/www/nginx # make # make install clean BATCH=YES
konfigurasi /usr/local/etc/nginx/nginx.conf, dan tambahkan baris ini di atas sebelum server:
gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 8; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css img/jpg img/jpeg application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
Kemudian masih di file nginx.conf edit bagian server seperti berikut:
server { listen 80; server_name coba1.contoh.com coba2.contoh.com; location / { proxy_pass http://127.0.0.1:8080; include /usr/local/etc/nginx/proxy.conf ; } location ~ /\. { deny all; } }
Buat dan edit file /usr/local/etc/nginx/proxy.conf isi baris berikut:
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; #proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Originating-IP $remote_addr; proxy_set_header HTTP_REMOTE_ADDR $remote_addr; proxy_set_header REMOTE_ADDR $remote_addr; add_header X-Cache $upstream_cache_status;
Selesai, start atau restart service nginx
# /usr/local/etc/rc.d/nginx onerestart
Install Apache Webserver
Pada saat “make config” pastikan semua modul proxy di enable.
# cd /usr/ports/www/apache24 # make config # make install clean BATCH=YES
Install module rpaf agar webserver apache dapat melihat ip asli dari sumber sebelum nginx.
# cd /usr/ports/www/mod_rpaf2 # make install clean BATCH=YES
Buka dan edit file /usr/local/etc/apache24/httpd.conf enable atau uncoment modul2 berikut:
LoadModule proxy_http_module libexec/apache24/mod_proxy_http.so LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so LoadModule proxy_scgi_module libexec/apache24/mod_proxy_scgi.so LoadModule proxy_fdpass_module libexec/apache24/mod_proxy_fdpass.so LoadModule rpaf_module libexec/apache24/mod_rpaf.so LoadModule fastcgi_module libexec/apache24/mod_fastcgi.so
Di bawah modul di atas tambahkan line berikut:
RPAFenable On RPAFheader X-Real-Ip RPAFproxy_ips 127.0.0.1 RPAFsethostname On RPAFheader X-Forwarded-For
Listen 127.0.0.1:8080
Aktifkan juga baris-baris berikut:
Include etc/apache24/extra/httpd-mpm.conf Include etc/apache24/extra/httpd-userdir.conf Include etc/apache24/extra/httpd-vhosts.conf
Edit file /usr/local/etc/apache24/extra/httpd-vhosts.conf isikan dengan baris berikut untuk server coba1 dan coba2.
<VirtualHost 127.0.0.1:8080> ServerAdmin admin@contoh.com ServerName coba1.contoh.com DocumentRoot "/home/coba1/public_html" ErrorLog "/home/coba1/log/error_log" CustomLog "/home/coba1/log/access_log" common ### khusus jika ingin menambahkan phpmyadmin di direktori lain## Alias /phpmyadmin "/usr/local/www/phpmyadmin" <Directory "/usr/local/www/phpmyadmin"> Require all granted </Directory> <FilesMatch \.php
gt; SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> </VirtualHost> <VirtualHost 127.0.0.1:8080> ServerAdmin admin@contoh.com ServerName coba2.contoh.com DocumentRoot "/home/coba2/public_html" ErrorLog "/home/coba2/log/error_log" CustomLog "/home/coba2/log/access_log" common ### khusu jika ingin menambhkan phpmyadmin di direktori lain## Alias /phpmyadmin "/usr/local/www/phpmyadmin" <Directory "/usr/local/www/phpmyadmin"> Require all granted </Directory> <FilesMatch \.php
gt; SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> </VirtualHost>
Jangan lupa buat direktori coba1 dan coba2 di /home lengkap dengan direktori log dan public_html
# mkdir -p /home/coba1/{log,public_html} # mkdir -p /home/coba2/{log,public_html} # echo "<?php phpinfo(); ?>" > /home/coba1/public_html/info.php # echo "<?php phpinfo(); ?>" > /home/coba2/public_html/info.php
start service apache dan php-fpm
# /usr/local/etc/rc.d/apache24 onestart # /usr/local/etc/rc.d/php-fpm onestart
Terakhir testing hasilnya melalui browser akses ke http://coba1.contoh.com/info.php harusnya sudah tampil halaman phpinfo.