Konfigurasi NGINX dan PHP Error "No input file specified."

NGINX logo

Saya mencoba install NGINX dan php-cgi di distro linux "CRUX". Ternyata config bawaannya yaitu /etc/nginx/nginx.conf belum disesuaikan agar bisa langsung bisa dijalankan.

Konfigurasi bawaannya seperti ini:

  1. location ~ \.php$ { 
  2.     root           html; 
  3.     fastcgi_pass   127.0.0.1:9000; 
  4.     fastcgi_index  index.php; 
  5.     fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name; 
  6.     include        fastcgi_params; 
  7. } 

Sedangkan untuk script wrapper php-cgi bawaan yaitu /etc/rc.d/php-fcgi seperti ini:

  1. #!/bin/sh 
  2. # 
  3. # /etc/rc.d/php-fcgi: start/stop FastCGI php daemon 
  4. # 
  5.  
  6. SSD=/sbin/start-stop-daemon 
  7. PROG=/usr/bin/php-cgi 
  8. PID=/var/run/php-fcgi.pid 
  9. PORT="127.0.0.1:8000" 
  10. # PORT="/tmp/php_fcgi.sock" 
  11. OPTS="-b $PORT" 
  12. USR=www 
  13. COUNT=8 
  14.  
  15. case $1 in 
  16. start) 
  17. 	export PHP_FCGI_CHILDREN=$COUNT 
  18. 	$SSD --start -bm --chuid $USR --pidfile $PID --exec $PROG -- $OPTS 
  19. 	;; 
  20. stop) 
  21. 	$SSD --stop --remove-pidfile --retry 10 --pidfile $PID 
  22. 	;; 
  23. restart) 
  24. 	$0 stop 
  25. 	$0 start 
  26. 	;; 
  27. status) 
  28. 	$SSD --status --pidfile $PID 
  29. 	case $? in 
  30. 	0) echo "$PROG is running with pid $(cat $PID)" ;; 
  31. 	1) echo "$PROG is not running but the pid file $PID exists" ;; 
  32. 	3) echo "$PROG is not running" ;; 
  33. 	4) echo "Unable to determine the program status" ;; 
  34. 	esac 
  35. 	;; 
  36. *) 
  37. 	echo "usage: $0 [start|stop|restart|reload|status]" 
  38. 	;; 
  39. esac 
  40.  
  41. # End of file 

Disitu bisa dilihat bahwa baik di config NGINX (baris 3) yaitu fastcgi_pass, maupun script php-fcgi (baris 9), sama-sama dikonfigurasikan untuk TCP/IP bukan socket. Tetapi ada perbedaan port, yaitu 9000 dan 8000. Nah, untuk itu saya memutuskan untuk tidak mengotak-atik script di /etc/rc.d, dan akhirnya saya ubah nginx.conf menjadi:

  1. location ~ \.php$ { 
  2.     fastcgi_pass   127.0.0.1:8000; 
  3.     fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name; 
  4.     include        fastcgi_params; 
  5. } 

Setelah itu saya jalankan keduanya, oh ya di CRUX tidak pake systemd jadi caranya seperti ini:

  1. # /etc/rc.d/php-fcgi start 
  2. # /etc/rc.d/nginx start 

Ternyata masalah tidak selesai disini, di browser hanya menampilkan:

"No input file specified."

Lalu saya perbaiki path SCRIPT_FILENAME, dan akhirnya config berikut ini bisa berjalan dengan baik:

  1. location ~ \.php$ { 
  2.     fastcgi_pass   127.0.0.1:8000; 
  3.     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; 
  4.     include        fastcgi_params; 
  5. } 

Cara lain, bagian include yang diubah, dan akan menjadi:

  1. location ~ \.php$ { 
  2.     fastcgi_pass   127.0.0.1:8000; 
  3.     include        fastcgi.conf; 
  4. } 

fastcgi_params dan fastcgi.conf adalah file config di directory /etc/nginx, yang bisa di-include. Jika fastcgi.conf yang digunakan, tidak perlu lagi menambahkan parameter untuk SCRIPT_FILENAME karena sudah ada disana. Berikut perbandingannya:

NGINX fastcgi_params

#Server