Nginx (pronunciado "motor x") es un servidor HTTP gratuito, de código abierto y de alto rendimiento. Nginx es conocido por su estabilidad, rico conjunto de funciones, configuración simple y bajo consumo de recursos. Este tutorial muestra cómo puede instalar Nginx en un servidor Ubuntu 8.10 compatible con PHP5 (a través de FastCGI) y MySQL.
1 nota preliminar
En este tutorial utilizo el nombre de host server1.example.com con la dirección IP 192.168.0.100. Estas configuraciones pueden diferir para usted, por lo que debe reemplazarlas cuando corresponda.
2 Instalación de MySQL 5.0
Para instalar MySQL, ejecutamos
apt-get install mysql-server mysql-client
Se le pedirá que proporcione una contraseña para el usuario root de MySQL; esta contraseña es válida para el usuario [email protected] así como para [email protected], por lo que no tenemos que especificar una contraseña de root de MySQL manualmente más adelante:
Nueva contraseña para el usuario "root" de MySQL:<-- yourrootsqlpassword
Repita la contraseña para el usuario "root" de MySQL:<-- yourrootsqlpassword
3 Instalación de Nginx
Nginx está disponible como paquete para Ubuntu 8.10 que podemos instalar de la siguiente manera:
apt-get install nginx
Inicie nginx después:
/etc/init.d/nginx start
Escriba la dirección IP o el nombre de host de su servidor web en un navegador (por ejemplo, http://192.168.0.100) y debería ver la página de bienvenida de nginx:
Para hacer que nginx se inicie en el momento del arranque, ejecute
update-rc.d nginx defaults
4 Instalación de PHP5
Podemos hacer que PHP5 funcione en nginx a través de FastCGI. Afortunadamente, Ubuntu proporciona un paquete PHP5 habilitado para FastCGI que instalamos así (junto con algunos módulos PHP5 como php5-mysql que necesita si desea usar MySQL desde sus scripts PHP):
apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
Luego abra /etc/php5/cgi/php.ini y agregue la línea cgi.fix_pathinfo =1 justo al final del archivo:
vi /etc/php5/cgi/php.ini
[...] cgi.fix_pathinfo = 1
No existe un paquete independiente FastCGI daemon para Ubuntu, por lo que usamos el programa spawn-fcgi de lighttpd. Instalamos lighttpd de la siguiente manera:
apt-get install lighttpd
Verá un mensaje de error que dice que lighttpd no pudo iniciarse porque el puerto 80 ya está en uso. Así es como se supone que debe ser porque nginx ya está escuchando en el puerto 80. Ejecutar
update-rc.d -f lighttpd remove
para que lighttpd no se inicie en el momento del arranque.
Instalamos lighttpd porque solo necesitamos un programa que viene con el paquete, /usr/bin/spawn-fcgi, que podemos usar para iniciar procesos FastCGI. Echa un vistazo a
spawn-fcgi --help
para obtener más información al respecto.
Para iniciar un demonio PHP FastCGI escuchando en el puerto 9000 en localhost y ejecutándose como usuario y grupo www-data, ejecutamos el siguiente comando:
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
Por supuesto, no desea escribir ese comando manualmente cada vez que inicia el sistema, por lo que para que el sistema ejecute el comando automáticamente en el momento del inicio, abra /etc/rc.local...
vi /etc/rc.local
... y agregue el comando al final del archivo (antes de la línea de salida):
[...] /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid [...]
5 Configuración de nginx
La configuración de nginx está en /etc/nginx/nginx.conf que abrimos ahora:
vi /etc/nginx/nginx.conf
La configuración es fácil de entender (puede obtener más información aquí:http://wiki.codemongers.com/NginxFullExample y aquí:http://wiki.codemongers.com/NginxFullExample2)
Primero (esto es opcional) aumente la cantidad de procesos de trabajo y establezca el tiempo de espera de keepalive_time en un valor razonable:
[...] worker_processes 5; [...] keepalive_timeout 2; [...]
Los hosts virtuales se definen en los contenedores del servidor {}. El host virtual predeterminado se define en el archivo /etc/nginx/sites-disponible/default. Modifiquémoslo de la siguiente manera:
vi /etc/nginx/sites-available/default
[...] server { listen 80; server_name _; access_log /var/log/nginx/localhost.access.log; location / { root /var/www/nginx-default; index index.php index.html index.htm; } location /doc { root /usr/share; autoindex on; allow 127.0.0.1; deny all; } location /images { root /usr/share; autoindex on; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/nginx-default; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { #proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } } [...]
nombre del servidor _; lo convierte en un vhost catchall predeterminado (por supuesto, también puede especificar un nombre de host aquí como www.example.com).
En la ubicación / parte, agregué index.php a la línea de índice. raíz /var/www/nginx-default; significa que la raíz del documento es el directorio /var/www/nginx-default.
La parte importante para PHP es la ubicación ~ \.php$ {} estrofa. Descoméntalo para habilitarlo. Asegúrese de cambiar la línea fastcgi_param a fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name; (reemplace /var/www/nginx-default con la raíz del documento de su vhost) porque, de lo contrario, el intérprete de PHP no encontrará el script PHP que llama en su navegador.
Asegúrese de que haya algunos espacios entre include y fastcgi_params; - en el archivo predeterminado esto está escrito como una palabra que es un error.
Ahora guarde el archivo y reinicie nginx:
/etc/init.d/nginx restart
Ahora cree el siguiente archivo PHP en la raíz del documento /var/www/nginx-default:
vi /var/www/nginx-default/info.php
<?php phpinfo(); ?>
Ahora llamamos a ese archivo en un navegador (por ejemplo, http://192.168.0.100/info.php):
Como puede ver, PHP5 funciona y funciona a través de FastCGI, como se muestra en la línea API del servidor. Si se desplaza hacia abajo, verá todos los módulos que ya están habilitados en PHP5, incluido el módulo MySQL:
6 Enlaces
- nginx:http://nginx.net/
- Wiki de nginx:http://wiki.codemongers.com/Main
- PHP:http://www.php.net
- MySQL:http://www.mysql.com
- Ubuntu:http://www.ubuntu.com/