¿Variables Nginx similares a SetEnv en Apache?
apache 2.4 setenv (4)
Debes tener en cuenta que nginx no gestiona procesos php como apache. Debe configurar php-fpm, o php-cgi, dependiendo de qué ejecuta php en su servidor.
php-cgi
...
env[APP_ENV] = production
...
php-fpm
location / {
...
fastcgi_param APP_ENV production;
...
}
Uso SetEnv en Apache para establecer algunas variables en hosts virtuales que recupero en PHP usando $_SERVER[the_variable]
.
Ahora estoy cambiando a Perl Catalyst y Nginx, pero parece que la directiva "env" en Nginx no es la misma. No funciona. ¿Cómo se puede lograr?
Aquí está la imagen de fondo, por si alguien puede sugerir un mejor enfoque o mi sistema anterior no funciona con Nginx.
- Uso la misma aplicación para muchos dominios. Todos los datos provienen de diferentes bases de datos con la misma estructura.
- El nombre de la base de datos está codificado en el host virtual, en esa variable de entorno.
- Como sé el nombre de la base de datos, todas las consultas van a su base de datos apropiada, desde la primera consulta.
- Puedo tener múltiples dominios usando la misma base de datos, solo incluyendo la misma variable en las directivas.
La ubicación del socket fastcgi_pass debe estar primero, luego cada uno de los parámetros de fastcgi_param . También puede listar variables en un archivo en la carpeta nginx config, luego incluir ese archivo. El archivo de inclusión comúnmente tiene el nombre fastcgi_params . Los parámetros de su entorno se pueden agregar fácilmente al bloque de manejo php:
location ~ /.php$ {
fastcgi_pass unix:/your_sock_location/nginxFastCGI.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param APP_ENV production;
include fastcgi_params;
}
El archivo fastcgi_params ubicado en el mismo directorio que nginx.conf a menudo se ve así:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
NGINX no administra sus procesos de back-end como lo hace apache, por lo que no puede afectar sus entornos. Para establecer una nueva variable de PHP $_SERVER
desde NGINX, necesita agregar una nueva entrada de fastcgi_param
junto con el resto de ellos. Donde sea que esté incluyendo fastcgi_params
o fastcgi.conf
.
location / {
...
fastcgi_param APPLICATION_ENV production;
fastcgi_param APPLICATION_CONFIG user;
...
}
pero es para PHP-CGI