jueves, 10 de junio de 2021

Instalación, Configuración, Host virtuales (VirtualHost) y certificado ssl NGINX + PHP

 

NGINX

¿Qué es NGINX?.

Nginx, pronunciado como “engine-ex”, es un servidor web de código abierto que, desde su éxito inicial como servidor web, ahora también es usado como proxy inverso, cache de HTTP, y balanceador de carga.
Algunas compañías de alto perfil que utilizan Nginx incluyen Autodesk, Atlassian, Intuit, T-Mobile, GitLab, DuckDuckGo, Microsoft, IBM, Google, Adobe, Salesforce, VMWare, Xerox, LinkedIn, Cisco, Facebook, Target, Citrix Systems, Twitter, Apple , Intel, y muchos más. Fuente: kinsta.com

1.- Conociendo que es NGINX, lo primero a realizar es instalar el mismo junto con php y letsencrypt (este ultimo para crear certificados ssl)  con el siguiente comando en Debian GNU/Linux:

apt-get install nginx letsencrypt python3-certbot-nginx php7.3 php7.3-bcmath php7.3-bz2 php7.3-cgi php7.3-cli php7.3-common php7.3-curl php7.3-dba php7.3-dev php7.3-enchant php7.3-fpm php7.3-gd php7.3-gmp php7.3-imap php7.3-interbase php7.3-intl php7.3-json php7.3-ldap php7.3-mbstring php7.3-mysql php7.3-opcache php7.3-phpdbg php7.3-pspell php7.3-readline php7.3-recode php7.3-snmp php7.3-soap php7.3-sqlite3 php7.3-sybase php7.3-tidy php7.3-xml php7.3-xmlrpc php7.3-xsl php7.3-zip

Para instalar php7.4 se explicará como instalar el mismo en una próxima entrada o publicación.

2.- Una vez hecho hecho esto solo hay que copiar los archivos de los proyectos web en sus directorios correspondientes si no se dispone de un proyecto web se puede usar un index.php de prueba con un contenido como "<?php phpinfo();" a continuación se puede hacer lo siguientes comandos:

mkdir -p /var/www/html/proyecto1 /var/www/html/proyecto2
echo "<?php phpinfo();" >  /var/www/html/proyecto1/index.php > /var/www/html/proyecto2/index.php

3.- En el siguiente paso se tendría que crear los virtual host para cada ruta respectiva ejecutando lo siguiente:

nano /etc/nginx/sites-available/www.proyecto1.com

Agregando el siguiente contenido mediante nano:

server {
        root /var/www/html/proyecto1;
        access_log /var/log/nginx/proyecto1/admin.log;
        
        # Add index.php to the list if you are using PHP
        index index.php index.html index.htm index.nginx-debian.html;

        server_name www.proyecto1.com;

        charset utf-8;
    
        location / {
                try_files $uri $uri/ /index.php?$query_string;
                #add_header 'Access-Control-Allow-Origin' '*';
                #add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
                #add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
                #add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
        }
        #location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
        #        try_files $uri $uri/ =404;
        #}

        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
               deny all;
        }
}

Luego de crear el archivo en sites-avaliable se debe crear la carpeta para los logs con el siguente comando:

mkdir -p  /var/log/nginx/proyecto1

Y luego crear el enlace simbólico del archivo de configuración del virtual host a la carpeta de activación del mismo la cual es sites-enabled con el siguiente comando:

ln -s /etc/nginx/sites-available/www.proyecto1.com /etc/nginx/sites-enable/www.proyecto1.com

El paso para el virtual host del proyecto 2 es muy parecido sería ejecutar los pasos anteriores pero colocando la referencia a "proyecto2" y "www.proyecto2.com" respectivamente.

4.- El siguiente paso sería verificar la sintaxis y reiniciar NGINX con los siguientes comandos como super usuario (root).

nginx -t

Si la salida observamos algo como "syntax ok" es que todo esta bien para iniciar nginx con el siguiente comando como super usuario (root):

/etc/init.d/nginx restart

5.- El siguiente paso es instalar los los certificados ssl con letsencrypt el cual se instala mediante la ejecución de los siguientes comandos como super usuario (root):

certbot --nginx -d www.proyecto1.com --post-hook "/usr/sbin/service nginx restart"
certbot --nginx -d www.proyecto2.com --post-hook "/usr/sbin/service nginx restart"

6.- El ultimo paso sería reiniciar NGINX como super usuario (root) y probar entrando al dominio del virtual host:

/etc/init.d/nginx start

Y acceder a las url de los dominios www.proyecto1.com y www.proyecto2.com


Si te gustan las entradas de este blog y quieres mayor actividad y mejores explicaciones y tutoriales no dudes entrar en la pagina de donaciones de este blog y realizar un donativo o patrocinar este en cualquiera de las opciones disponibles y que se hacen referencia allí.