En este artículo voy a demostrar cómo es posible pasar variables de entorno desde Nginx a PHP5-FPM para que estén accesibles en el arreglo $_SERVER de PHP.



Cierta aplicación Web requiere de variables de entorno definidas para su correcta ejecución. Esta situación no es muy común en software open source, pero puede darse con aplicaciones propietarias.

Cuando utilizamos un servidor Web Apache con PHP como módulo, esto se logra utilizando la directiva SetEnv. Por ejemplo:

    SetEnv VARIABLE "valor"

Sin embargo, si hemos montado un servidor Web Nginx con PHP-FPM, los sitios Web se definen en la configuración de Nginx, pero el código PHP es ejecutado por el servidor FastCGI PHP-FPM. Entonces, en esta configuración, Nginx debe definir y enviarle las variables de entorno al servidor FastCGI. A tal fin, la directiva fastcgi_param se encarga de definir variables de entorno, y pasárselas al servidor FastCGI.

Veamos un ejemplo, la aplicación Web en cuestión (ejecutada por el servidor FastCGI PHP-FPM) requiere de la variable EJEMPLO definida con cierto valor. Editar la configuración del servidor Nginx:

root@linuxito:~# nano /usr/local/nginx/nginx.conf

Luego de definir la dirección del servidor FastCGI (en este ejemplo ha sido definida previamente a través de una directiva upstream) mediante fastcgi_pass, indicar los parámetros CGI. Estos parámetros son básicamente pares variable/valor que aparecen en el servidor FastCGI como si fuesen variables de entorno:

        location = /info.php {
           root /usr/local/www/nginx;
           fastcgi_pass php-fpm-sock;
           fastcgi_param EJEMPLO "linuxito.com";
           include fastcgi_params;
           access_log off;
        }

En este ejemplo se define la variable EJEMPLO, cuyo valor es linuxito.com.

Recargar la configuración del servidor Nginx:

root@linuxito:~# service nginx reload

Luego es posible comprobar el funcionamiento de esta configuración utilizando phpinfo(). Definir un script PHP (info.php) que sólo ejecute esta función:

<?php
phpinfo();

Acceder a dicho script desde un navegador Web:

Se observa que en el arreglo $_SERVER (el cual contiene las variables de entorno del servidor) aparece la variable que hemos definido en la configuración de Nginx.

Referencias


Tal vez pueda interesarte


Compartí este artículo