
Menjalankan aplikasi PHP di nginx ada banyak pilihan cara. Bisa dengan melakukan proxy ke apache yang terinstall modul php, atau menjalankan php menjadi fast-cgi server, lalu nginx mengaksesnya melalui konfigurasi fast-cgi.
Tutorial ini akan membahas bagaimana menginstal php dan dijalankan sebagai FastCGI server. Semua contoh yang diberikan, didasarkan pada instalasi Ubuntu 8.04. Tulisan ini sebelumnya sudah saya publish di wiki saya.
Instalasi PHP dan modulnya
Untuk contoh, kita akan menginstall php dan modul php-mysql, sekalian dengan mysql-servernya.
sudo apt-get install php5-cgi php5-mysql mysql-server
Jika memerlukan, Anda bisa juga menginstal modul php yang lain. Untuk melihat daftar modul php5 yang ada di repo ubuntu.
apt-cache search php5-
Konfigurasi Skrip Init FastCGI
Kita akan menjalankan php sebagai FastCGI server langsung, tanpa bantuan aplikasi lain.
Buat berkas baru /etc/default/php-fastcgi
START=yes # Which user runs PHP? (default: www-data) EXEC_AS_USER=www-data # Host and TCP port for FASTCGI-Listener (default: localhost:9000) FCGI_HOST=localhost FCGI_PORT=9000 # Environment variables, which are processed by PHP PHP_FCGI_CHILDREN=4 PHP_FCGI_MAX_REQUESTS=1000
Lalu buat juga berkas /etc/init.d/php-fastcgi
#! /bin/bash ### BEGIN INIT INFO # Provides: php-fastcgi # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start and stop php-cgi in external FASTCGI mode # Description: Start and stop php-cgi in external FASTCGI mode ### END INIT INFO # Author: Kurt Zankl # Do NOT "set -e" PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="php-cgi in external FASTCGI mode" NAME=php-fastcgi DAEMON=/usr/bin/php-cgi PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME PHP_CONFIG_FILE=/etc/php5/cgi/php.ini # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # If the daemon is not enabled, give the user a warning and then exit, # unless we are stopping the daemon if [ "$START" != "yes" -a "$1" != "stop" ]; then log_warning_msg "To enable $NAME, edit /etc/default/$NAME and set START=yes" exit 0 fi # Process configuration export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS DAEMON_ARGS="-q -b $FCGI_HOST:$FCGI_PORT -c $PHP_CONFIG_FILE" do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON \ --background --make-pidfile --chuid $EXEC_AS_USER --startas $DAEMON -- \ $DAEMON_ARGS \ || return 2 } do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE > /dev/null # --name $DAEMON RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. # If the above conditions are not satisfied then add some other code # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don’t delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 3 ;; esac
Setelah itu, jalankan perintah berikut, untuk memastikan skrip bisa dieksekusi.
sudo chmod 755 /etc/init.d/php-fastcgi
Konfigurasi Virtual Host di Nginx
Contoh konfigurasi virtualhost, semua request ke script php akan diarahkan ke fastcgi server. Sisanya tetap dilayani langsung dari nginx.
server {
listen 80;
server_name localhost;
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
}
location / {
root /var/www;
index index.php;
}
}Menjalankan PHP sebagai FastCGI Server
Untuk menjalankan php dalam mode FastCGI, Anda tinggal mengeksekusi skrip di atas.
sudo /etc/init.d/php-fastcgi start
Dan untuk memastikan skrip ini dijalankan waktu booting, gunakan perintah berikut:
sudo update-rc.d php-fastcgi defaults
Test Instalasi
Untuk mentest, coba buat folder /var/www/ (jika belum dibuat), lalu buat berkas test yang berisikan fungsi phpinfo().
sudo mkdir /var/www
Setelah itu buat berkas /var/www/info.php, isinya
<?php phpinfo(); ?>
Sekarang Anda bisa mengaksesnya melalui web ke http://localhost/info.php.
Membangun Web Server dengan Nginx
- VIDEO: Instalasi Nginx di Ubuntu Hardy
- Instalasi PHP sebagai FastCGI di Nginx
- Konfigurasi Virtual Host di Nginx






3 Komentar
Bagus… Berguna….
Thx udh ada yang bahasa Indonesia..
udah Berkali kali coba
pas saat akses file PHP selalu keluar
502 Bad Gateway
Apa yang salah? saya ganti server listening on 127.0.0.1:9000
menjadi 127.0.0.1:8888
sama masalah nya dng mas ram di atas…
nih yg buat tutor kok diem aja… bantuin kita donk pak…
thx