28 noviembre 2007

Cómo instalar Nginx para sustituir a Apache, tercera parte

Primera parte, Segunda parte, Tercera parte, Cuarta parte


En esta tercera parte voy a incluir los ficheros que he escrito para levantar los servicios de nginx y FastCGI al arrancar el sistema en Red Hat o en CentOS.

Lo primero he incluido un fichero en /usr/bin llamado phpfcgi basado en la configuración que muestran en este howto.

El contenido del fichero es el siguiente:

spawn-fcgi -f /opt/php/bin/php-cgi -s /tmp/fcgi.sock -u apache -C 50 -P "/var/run/phpfcgi.pid"


En este fichero simplemente indicamos cómo arrancamos php-cgi, que se cree un socket de unix, con qué usuario deben correr las instancias, el número de instancias y el pid que se debe crear.

Después me he basado en el fichero de arranque de lighttpd, y convenientemente modificado he escrito estos dos ficheros, el primero es para el arranque de nginx, y el segundo para el arranque de FastcGI. Si nginx no está arrancado, el segundo no arranca

Este es el fichero para arrancar nginx:

#!/bin/sh
#
# nginx Startup script for the nginx server
#
# chkconfig: - 85 15
# description: Nginx fast webserver with light system requirements
#
# processname: nginx
# config: /user/local/nginx/conf/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/ngnix.pid
#
# Note: pidfile is assumed to be created
# by nginx (config: server.pid-file).
# If not, uncomment 'pidof' line.

# Source function library
. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/nginx ]; then
. /etc/sysconfig/nginx
fi

if [ -z "$NGINX_CONF_PATH" ]; then
NGINX_CONF_PATH="/usr/local/nginx/conf/nginx.conf"
fi

prog="nginx"
nginx="/usr/local/nginx/sbin/nginx"
RETVAL=0
RETVAL1=0

start() {
echo -n $"Starting $prog: "
daemon $nginx
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
return $RETVAL
}

stop() {
echo -n $"Stopping $prog: "
killproc $nginx
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
return $RETVAL
}

reload() {
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
return $RETVAL
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
condrestart)
if [ -f /var/lock/subsys/$prog ]; then
stop
start
fi
;;
reload)
reload
;;
status)
status $nginx
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|reload|status}"
RETVAL=1
esac

exit $RETVAL




Y para FastCGI:

#!/bin/sh
#
# fastcgi Startup script for the fastcgi server
#
# chkconfig: - 87 15
# description: start fastcgi
#
# processname: phpfcgi
# config: /etc/sysconfig/phpfcgi
# pidfile: /var/run/phpfcgi.pid
#
# Note: pidfile is assumed to be created
# by fastcgi (config: server.pid-file).
# If not, uncomment 'pidof' line.

# Source function library
. /etc/rc.d/init.d/functions

prog="phpfcgi"
phpfcgi="/usr/bin/phpfcgi"
RETVAL=0

[ -e /var/run/nginx.pid ] || exit 0

start() {

echo -n $"Starting $prog: "
daemon $phpfcgi
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
return $RETVAL
}

stop() {
echo -n $"Stopping $prog: "
killproc $phpfcgi
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
return $RETVAL
}


case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
condrestart)
if [ -f /var/lock/subsys/$prog ]; then
stop
start
fi
;;
reload)
stop
start
;;
status)
status $phpfcgi
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|reload|status}"
RETVAL=1
esac

exit $RETVAL


En fin, supongo que podría darle más vueltas, pero estos dos funcionan, ahora simplemente hay que añadirlos al arranque con chkinstall y cuidar de que no se arranque apache también.

Primera parte, Segunda parte, Tercera parte, Cuarta parte

2 comentarios:

Anónimo dijo...

Pero es tan bueno este nginx?, yo he visto por ahí que lighttpd se utiliza bastante

jmcalvar dijo...

Yo he utilizado el lighttpd, y el principal problema que encontraba es que no me escribía entradas en log de error de los ficheros no encontrados, incluso activando el debug-404. Puse un post en los foros oficiales y nadie me responde.

Además dice la gente por ahí que tiene bastantes leaks de memoria.

Lo que llevo utilizando nginx no me ha dado ningún problema