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.

Comments are closed.