26 de enero de 2021

Nginx + php para novatos.

Luego de entender cómo debe configurarse nginx para servir páginas seguras con HTTPS me vi en la necesidad de hacer que tuviera también la capacidad de soportar scripts. 

¿La razón? En este servercito tengo un proxy squid corriendo, tengo youtube.com bloqueado por default. El caso es que encontré una serie de cursos para dibujar que precisamente sólo están en YT. 
Intendé configurar estas excepciones en el proxy pero no tuve éxito. De ahí se me ocurrió probar con la configuración de archivos pac (Proxy Auto Configuration). 

Desde el inico pensé en un esquema ocmo el de CGI en el cual podía hacer que incluso un script de shell pudiera ejecutarse. Luego de buscarle un rato encontré algunas alternativas pero no me sentí cómodo con ninguna por lo que decidí la vieja confiable web server +ssl. 

Hace un montón de años, cuando PHP 5 era el último gruto de l amoda dejé de trabajar con estas soluciones. Imagínense. Me encontré con que php ya va en la versión 7. Como sea, no iba a instalar Apache para configurarlo otra ves con ssl y ahora, php. Lo más lógico era buscar cómo ponerle phpp al nginx. 

Pues bueno, encontré otro tutorial (How to Install Nginx + PHP5-FPM + MySEL on Linuxmint 18 / Linux Mint 17) a partir del cual me basé . Valga aclarar que tengo un Linux Mint 19.3 (Tricia)

Ok, primer paso, descargar el software. 

# apt-get install php-fpm php-cli

Segundo: Editar /etc/php/7.2/fpm/php.ini 
Busque  cgi.fix_pathinfo y póngalo a cero
cgi.fix_pathinfo=0

Tercero: Editar /etc/php/7.2/fpm/pool.d/www.conf
Busque listen y póngalo así: 
listen = /run/php/php7.2-fpm.sock

Cuarto: Agregar el soporte de php a nginx
Originalmente mi servidor web tenía definido un bloque server para abos puertos 80 y 443. 
Decidí separarlos y quedó así: 

        server {
                listen              443;
                server_name         192.168.100.109;
                root /var/www/html;
                index index.html index.htm index.php;
                ssl on;
                ssl_certificate     tudominio.crt;
                ssl_certificate_key tudominio.key;
        }

        server {
                listen  80;
                server_name     192.168.100.109;
                root /var/www/html;
                location / {
                        index index.html index.php;
                }
                location ~ \.(php|pac|html)$ {
                        include /etc/nginx/fastcgi_params;
                        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
                }
        }

Hecho lo cual hice un archivo de texto desde el que se deberían importar las ligas, localizado en 
/var/www/html/excepciones.txt con el siguiente contenido: 

https://www.youtube.com/watch?v=H4jo3DYkniE
https://www.youtube.com/watch?v=5HBcEsXIxYw
https://www.youtube.com/watch?v=EuHpVPI7h_4

De ahí, hice el archivo .pac, que como vimos arriba es una de las extensiones asociadas a php:

function FindProxyForURL(url,host) {
        if (shExpMatch(host,"192.168.100.107")) {
                return "DIRECT";
        }
<?php
        $ifp=fopen("/opt/proxy/leo/etc/clasesSep.txt","r");
        while ($linea=rtrim(fgets($ifp))) {
                printf(" else if (url.endsWith(\"%s\")) {\n",$linea);
                printf("\t\treturn \"DIRECT\";\n\t }");
        }
        fclose($ifp);
?>
 else {
                return "PROXY 192.168.100.109:32008";
        }
}

La cosa es que devuelve el siguiente archivo de texto que es el que se le envía al nevagdor o sistema operativo para configurar el proxy

function FindProxyForURL(url,host) {
        if (shExpMatch(host,"192.168.100.107")) {
                return "DIRECT";
        }
 else if (url.endsWith("https://www.youtube.com/watch?v=H4jo3DYkniE")) {
                return "DIRECT";
         } else if (url.endsWith("https://www.youtube.com/watch?v=5HBcEsXIxYw")) {
                return "DIRECT";
         } else if (url.endsWith("https://www.youtube.com/watch?v=EuHpVPI7h_4")) {
                return "DIRECT";
         } else {
                return "PROXY 192.168.100.109:32008";
        }
}

Al final, no está funcionando ... pro bueno, estoy trabajando en ello. 

Hasta la próxima!

No hay comentarios.: