Cómo instalar Nginx + PHP + MariaDB en Windows


Si alguna vez ha necesitado de un servidor web estable, sin lujos y muy rápido, entonces la respuesta esta en Nginx (Engine X), el cual es un servidor web bastante sólido y sobre todo destaca por su velocidad en comparación con otros como Apache2.

Nginx es nativo de la plataforma Unix, por lo que funciona perfecto en entornos Linux y es muy usado por grandes empresas que en su momento necesitaron darle un respiro al excesivo consumo de recursos que tenían en sus servidores.

Para el caso de Windows deberán de conseguir una versión precompilada o instalar Cygwin. Yo he optado por la primera alternativa, ya que hay un paquete disponible creado por Kevin Worthington que funciona muy bien.

Descargue el paquete estable e instalarlo. Debido a la configuración de Cygwin, que se instalará en c:\nginx.

A continuación, descargue los últimos binarios de PHP para Windows, al día de hoy la última versión es la PHP 5.5 (5.5.9) - VC11 x86 Thread Safe (2014-Feb-06 00:36:12), descargar el archivo .zip, no el instalador y extraer todos los archivos en c:\php por ejemplo. Ahora con PHP vamos a usar php-cgi.exe debido a que nginx trabaja con fast-cgi. Asegúrese de que la ruta de acceso es c:\php\php-cgi.exe.

Ingresar a c:\nginx\conf y descomentar o modificar las siguientes líneas en nginx.conf.
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
location ~ \.php$ { ############
root           html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME c:/nginx/html/$fastcgi_script_name;
include        fastcgi_params;
}
Luego, en la misma carpeta, editar start-nginx.bat la siguiente línea (borrar REM):
@ECHO OFF
c:\nginx\nginx.exe
c:\php\php-cgi.exe -b 127.0.0.1:9000 -c c:\php\php.ini
ping 127.0.0.1 -n 1>NUL
echo Starting nginx
echo .
echo .
echo .
ping 127.0.0.1 >NUL
EXIT
Ahora verifique que stop-nginx.bat contenga las siguientes líneas:
@ECHO OFF
taskkill /f /IM nginx.exe
taskkill /f /IM php-cgi.exe
EXIT
EXIT

En este punto ya deberíamos tener nginx y PHP funcionando si ejecutamos el icono "Start nginx" del escritorio, pero aún no hemos terminado, falta instalar MariaDB como motor de base de datos y para empezar nos descargamos la última versión estable para Windows, que para el día de hoy es la 5.5.35, para luego descomprimir el .zip en c:\mariadb.

Para empezar con esto, si lo desea puede eliminar las carpetas mysql-test, sql-bench y las carpetas cuyo nombre indique que son de debug, esto es totalmente opcional.

En la carpeta c:\mariadb encontrará varios archivos de muestra para la configuración de su servidor de base de datos, de acuerdo al tamaño que considere requerirá su aplicación puede elegir uno, la diferencia entre ellos está básicamente en los los parámetros para los recursos, crear una copia del archivo y renombrarla como my.ini.

Siempre es recomendable crear una copia de respaldo de los archivos a modificar para evitar modificar los originales directamente y de estar forma si algo sale mal, poder volver al inicio.

Abrir el nuevo my.ini y cambiar la sección [client] para que coincida con la siguiente:

[client]
password = q1w2e3r4
port     = 3306
socket   = c:/mariadb/tmp/mysql.sock

Tenga en cuenta el estilo de las barras inclinadas, es al estilo Linux (/) y no Windows (\). Ahora en la sección [mysqld] del mismo archivo cambiarla para que coincida con lo siguiente:

[mysqld]
port            = 3306
socket          = c:/mariadb/tmp/mysql.sock
basedir         = c:/mariadb
datadir         = c:/mariadb/data
bind-address    = 127.0.0.1
enable-named-pipe
skip-external-locking
key_buffer_size         = 256M
max_allowed_packet      = 1M
table_open_cache        = 256
sort_buffer_size        = 1M
read_buffer_size        = 1M
read_rnd_buffer_size    = 4M
myisam_sort_buffer_size = 64M
thread_cache_size       = 8
query_cache_size        = 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency      = 8

Ahora vamos a iniciar nuestro servidor MariaDB, para realizar correctamente las acciones que vienen a continuación deberá hacerlas como administrador, es decir, en el caso de Windows Vista o superior tener UAC deshabilitado o en todo caso iniciar una instancia de la línea de comandos haciendo clic derecho "Ejecutar como administrador".

Desde el símbolo de sistema (DOS), ir a la ruta c:\mariadb\bin y ejecutar el siguiente comando para instalar MariaDB como servicio y este se inicie manualmente, el servicio se instalará con el nombre por defecto que es MySQL:

C:\mariadb\bin>mysqld.exe --install-manual
Service successfully installed.

Si desea que el servicio se inicie automáticamente puede usar:

C:\mariadb\bin>mysqld.exe --install
Service successfully installed.

Y si además desea ponerle un nombre específico, como podría ser MariaDB, el comando debería ser como el siguiente:

C:\mariadb\bin>mysqld.exe --install MariaDB
Service successfully installed.

Con esto tendríamos el servicio ya instalado ahora para arrancar nuestro servidor usar el siguiente comando:

C:\mariadb\bin>net start mysql --console
El servicio de MySQL está iniciándose....
El servicio de MySQL se ha iniciado correctamente.

Antes de continuar necesitamos hacer algunas configuraciones típicas de todo sistema recién instalado, por defecto el usuario root se registra sin password, antes de asignarle uno vamos a verificar nuestra instalación de MariaDB, para esto ejecutar desde la misma línea de comandos:

C:\mariadb\bin>mysqladmin.exe -u root -p -h localhost version status

Con lo que podremos ver una pantalla como la siguiente, donde nos muestra algunos datos de la instalación, luego de ejecutado el comando nos saldrá en pantalla "Enter password", por ahora solo dejarlo en blanco y presionar la tecla Enter ya que no tenemos password asignado:


Ahora para cambiar el password a nuestro usuario root, o mejo dicho asignarle uno, ya que hasta el momento no tiene, seguir los siguiente pasos:

C:\mariadb\bin> mysql -u root -p
Enter password: [Enter]

MariaDB [(none)]> use mysql;
MariaDB [(mysql)]> update user set password=PASSWORD("newpass") where User='root';
MariaDB [(mysql)]> flush privileges;
MariaDB [(mysql)]> exit;

El resultado será como el siguiente:


Una vez completado esto, vamos a probar si el hemos realizado la asignación de contraseña correctamente, para esto intentamos nuevamente conectarnos usando el password en blanco y luego con el password asignado, en mi caso "newpass".


Finalmente vamos a hacer unas modificaciones en nuestro php.ini para poder conectarnos a la base de datos, abrimos el archivo c:\php\php.ini y buscamos "extension_dir" que se debe encontrar por la linea 731 aproximadamente, modificamos el valor que tenga y le colocamos:

extension_dir = "c:\php\ext"

Borrar el punto y coma que tiene al inicio y agregar la ruta a la carpeta "ext", esto para indicarle en que directorio se encuentran las extensiones de PHP que vamos a habilitar. Más abajo por la línea 886 encontraremos las extensiones para MySQL, usaremos estas mismas para conectarnos a MariaDB, yo suelo activar las siguientes:

extension=php_curl.dll
extension=php_gd2.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
extension=php_sockets.dll

Esto para empezar debería ser suficiente, guardamos el archivo y ahora si vamos a iniciar nuestro servidor nginx, y cargar el clásico phpinfo().


Y en la parte inferior podemos ver algunos datos más de la instalación de nginx.


Ahora vamos a probar conectarnos a la base de datos MariaDB con un script de PHP, y como no tenemos ninguna tabla creada usaremos la misma tabla user que viene por defecto en la instalación. Haciendo la consulta vía consola obtendríamos los siguiente resultados:


Y haciendo uso del siguiente script en PHP:

<?php
$con=mysqli_connect("localhost","root","newpass","mysql");

// Check connection
if (mysqli_connect_errno())
{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM user");

echo "<pre>";
while($row = mysqli_fetch_array($result))
{
  echo $row["Host"] . " -- " . $row["User"] . " -- " . $row["Password"] . "\n";
}
mysqli_close($con);
?>

El resultado obtenido es:


Ahora si! Listo y probado nuestro servidor Nginx con PHP y MariaDB.

Comentarios