Variables Nginx similaires à SetEnv dans Apache?

J’utilise SetEnv dans Apache pour définir des variables dans virtualhosts que je récupère en PHP en utilisant $_SERVER[the_variable] .

Maintenant, je passe à Perl Catalyst et Nginx, mais il semble que la directive “env” dans Nginx ne soit pas la même. Ça ne marche pas. Comment peut-il être accompli?

Voici l’image de fond, juste au cas où quelqu’un pourrait suggérer une meilleure approche ou que mon ancien système ne fonctionne pas avec Nginx.

  • J’utilise la même application pour de nombreux domaines. Toutes les données proviennent de différentes bases de données avec la même structure.
  • Le nom de la firebase database est codé en dur sur l’hôte virtuel, dans cette variable d’environnement.
  • Comme je connais le nom de la firebase database, toutes les requêtes vont à la firebase database appropriée, dès la première requête.
  • Je peux avoir plusieurs domaines utilisant la même firebase database, en incluant simplement la même variable dans les directives.

NGINX ne gère pas vos processus dorsaux comme le fait Apache, il ne peut donc pas affecter leurs environnements. Pour définir une nouvelle variable PHP $_SERVER à partir de NGINX, vous devez append une nouvelle entrée fastcgi_param avec les autres. Où que vous soyez, y compris fastcgi_params ou fastcgi.conf .

 location / { ... fastcgi_param APPLICATION_ENV production; fastcgi_param APPLICATION_CONFIG user; ... } 

mais c’est pour PHP-CGI

N’oubliez pas que nginx ne gère pas les processus php comme le fait apache. Vous devez configurer php-fpm ou php-cgi en vous fiant à ce qui exécute php sur votre serveur.

php-cgi

 ... env[APP_ENV] = production ... 

php-fpm

 location / { ... fastcgi_param APP_ENV production; ... } 

L’ emplacement de socket fastcgi_pass doit passer en premier, puis chacun des parameters fastcgi_param . Vous pouvez également répertorier les variables dans un fichier du dossier de configuration nginx, puis inclure ce fichier. Le fichier include a généralement le nom fastcgi_params . Vos parameters d’environnement peuvent être facilement ajoutés au bloc de gestion 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; } 

Le fichier fastcgi_params situé dans le même répertoire que nginx.conf ressemble souvent à ceci:

 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_ssortingng; 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;