Comunidad de diseño web y desarrollo en internet

Primeros pasos con Nginx

Después de hablar sobre el poder que nos brinda Nginx, uno lo que primero piensa es ¿Y cómo comienzo a usarlo?. La mayoría de las personas usan Apache y se les dificulta el salto a Nginx porque, prácticamente, deben conocer Nginx desde cero ya que no hay casi similitudes entre Apache y Nginx en la sintaxis de configuración, por esa razón tocaré todos los temas requeridos para usar Nginx en distribuciones GNU/Linux. ¡Comencemos!



Instalación de Nginx y su demonio (servicio)



Instalación

Hay dos formas de instalar Nginx en cualquier sistema operativo GNU/Linux; la primera vía es a través del código fuente, construyendo e instalando todas las librerías que requiere (PCRE, zlib, OpenSSL) y luego compilando el servidor web. Esta es la vía más larga.

La segunda es a través de los repositorios de las distribuciones.

Para distribuciones basadas en Debian:

Código :

# apt-get install nginx


Para distribuciones basadas en Red Hat:

Código :

# yum install nginx


Demonio (Servicio) de Nginx

El demonio de Nginx permite hacer distintas operaciones sobre el servidor web, como iniciar, detener, reiniciar, probar y recargar la configuración de Nginx.

En las distribuciones basadas en Debian y las basadas en Red Hat Enterprise Linux, se usan los archivos init para manejar los demonios, por lo tanto se usa el comando service.

Comandos de control



Iniciar. detener y reiniciar, respectivamente:

Código :

# service nginx (start | stop | restart)


Probar y recargar la configuración:

Código :

# service nginx (configtest | reload)


Estado del demonio:

Código :

# service nginx status


Distribuciones basadas en Systemd

Para las distribuciones basadas en Systemd, se usa el siguiente comando:

Código :

# systemctl <acción> <servicio>.service


Donde acción son todas las opciones ya nombradas (start, restart, reload, etc) y servicio es "nginx".

Primera página web en Nginx


Al instalar Nginx, se crea por defecto una página de prueba. Si uno inicia Nginx y accede a localhost o la IP que uno esté utilizando debe aparecer una página como la siguiente:



La configuración inicial que detallaremos en otros artículos es la siguiente (/etc/nginx/nginx.conf):

Código :

user     nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    
    # Load config files from the /etc/nginx/conf.d directory
    # The default server is in conf.d/default.conf
    include /etc/nginx/conf.d/*.conf;

}


Y la configuración de la página de prueba (/etc/nginx/config.d/default.conf):

Código :

#
# The default server
#
server {
    listen       80 default_server;
    server_name  _;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # 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$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$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;
    #}
}


Ambos archivos los podemos usar como plantilla para nuestras aplicaciones/sitios.

La configuración de Nginx se encuentra en /etc/nginx/, en la raíz de esa dirección encontraremos nginx.conf y en el subdirectorio conf.d vamos a conseguir todos los sitios que tengamos configurado para nuestro servidor web.

Vamos a modificar la página por defecto de Nginx con un ¡Hola Mundo!

Primero agregamos el usuario al grupo nginx con:

Código :

# usermod -g nginx <nombre de usuario>


Luego creamos un directorio para todos los sitios que realicemos, en lo particular me gusta la dirección /srv.

Vamos a /srv y creamos un directorio www.

Código :

# cd /srv
# mkdir www
# chown nginx.nginx www # Cambiamos el dueño de la carpeta al usuario y grupo nginx


Accedemos a www y creamos la carpeta para nuestro primer sitio.

Código :

# cd www
# mkdir cristalab
# chown miusuario.nginx cristalab


Hasta aquí dejamos de trabajar como root, y pasamos a nuestro usuario para crear la primera página.

Código :

$ vi index.html


Presionamos la letra "i" copiamos este texto "¡Hola Mundo! en Nginx desde Cristalab" con Ctrl + Shift + V, presiona ESC por último escribe ":wq" y presiona ENTER. (Bienvenido a VI/VIM :D)

Como root nuevamente vamos a la configuración del sitio "default" (/etc/nginx/conf.d/default.conf) de Nginx y modificamos la ruta de location.

Código :

location / {
        root   /srv/www/cristalab;
        index  index.html index.htm;
}


Recargamos la configuración.

Código :

# service nginx reload


Y accedemos nuevamente desde el navegador y nos mostrará el mensaje que colocamos en el archivo html.



Algunas preguntas frecuentes sobre Nginx:

¿Cuándo usar Nginx?


Cuando desees desplegar una aplicación web. Nginx por su naturaleza es flexible y permite montar toda una aplicación/sitio web parcial o totalmente, y no tiene nada que envidiarle a otros servidores web.

¿Nginx funciona con Django, Symfony, Ruby on Rails o algún otro framework web?


Sí, sólo hay que instalar el contenedor que ejecute el framework correspondiente y hacer un proxy hacia el puerto de dicho contenedor CGI o WSGI.

No puedo iniciar el servidor


Si les aparece un mensaje como el siguiente:

Código :

Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)


...deben verificar si no tienen otro software que esté utilizando el puerto, por lo general las distribuciones GNU/Linux para servidores traen por defecto ya instalado Apache, seguramente se está ejecutando Apache o hay procesos de Nginx vagando por allí.

La primera solución es detener y desactivar Apache:

Código :

# service httpd stop # Para Red Hat
# service apache2 stop # Debian


Código :

# chkconfig httpd off # Red Hat
# chkconfig apache2 off # Debian


La segunda es detener cualquier proceso de Nginx:

Código :

# killall nginx

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate