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 )
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.
Por Robbert el 14 de Enero de 2014
¿Una pregunta si necesito agregar varios dominios en un solo servidor como le puedo hacer?
Por yograterol el 14 de Enero de 2014
Robbert-blog :
¿Una pregunta si necesito agregar varios dominios en un solo servidor como le puedo hacer?
Agregas otro archivo de configuración en /etc/nginx/conf.d y en "server_name" agregas el nombre o los nombres de dominios separados por espacios.
Por John el 16 de Enero de 2014
Por yograterol el 16 de Enero de 2014
John-blog :
Por supuesto... En un post que viene por allí.
Por Eduar Tua el 26 de Enero de 2014
Por MHCelso el 20 de Marzo de 2015
Por Wintendo el 09 de Octubre de 2015
Por Josejuan el 13 de Octubre de 2015
Por isaac el 07 de Marzo de 2016
Por Carlos el 24 de Mayo de 2016