Apache'deki SetEnv'e benzer Nginx değişkenleri?


83

PHP'de kurtardığım sanal konaklarda bazı değişkenleri ayarlamak için Apache'de SetEnv kullanıyorum $_SERVER[the_variable].

Şimdi Perl Catalyst ve Nginx'e geçiyorum, ancak görünen o ki, Nginx'teki "env" yönergesi aynı değil. İşe yaramıyor. Nasıl başarılabilir?

Arka plan resmi, birisinin daha iyi bir yaklaşım önerebilmesi veya önceki sistemimin Nginx ile çalışmaması durumunda.

  • Birçok alan için aynı uygulamayı kullanıyorum. Tüm veriler aynı yapıya sahip farklı veritabanlarından gelir.
  • Veritabanı adı, bu ortam değişkenindeki sanal ana bilgisayara kodlanmıştır.
  • Veritabanı adını bildiğim için, tüm sorgular ilk sorgudan itibaren uygun veritabanına gider.
  • Aynı veritabanını kullanarak birden fazla etki alanına sahip olabilirim, sadece aynı değişkeni direktiflere dahil edebilirim.

Yanıtlar:


57

NGINX, apache'nin yaptığı gibi arka uç işlemlerinizi yönetmez, bu nedenle ortamlarını etkileyemez. $_SERVERNGINX'ten yeni bir PHP değişkeni ayarlamak için fastcgi_param, diğerleriyle birlikte yeni bir giriş eklemeniz gerekir. fastcgi_paramsVeya dahil ettiğiniz her yerde fastcgi.conf.


1
Teşekkür ederim, hile yapıyor. Perl Catalyst kullanan kişiler için gerekli değer $ c-> engine-> env -> {MY_CUSTOM_VARIABLE} içinde, php'de $ _SERVER'a benzer. [link] search.cpan.org/dist/Catalyst-Runtime/lib/Catalyst/Engine.pm
MIguelele

Bu benim için doğru değil ... Değişkeni böyle belirlediğimde, değişkeni sadece getenv yöntemi ile alabilirim. Değişken $ _SERVER dizisine eklenmez.
Pablo Ezequiel Leone

@MIguelele, değişken zinciri $ c-> engine-> env -> {SOME_ENV_VAR}, fastcgi arayüzü tarafından dağıtılan $ ENV {SOME_ENV_VAR} ile kesinlikle aynıdır.
Znik

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

ancak PHP-CGI için


22
Sağdaki yorumların amacının ne olduğunu merak ediyorum :-)
lks128

Sanırım apache eşdeğerini bir yorum olarak göstermek istedi
lloiacono

5
Sonra oldukça kötü bir şekilde başarısız oldu, çünkü bu Apache'de ortam değişkenlerinin nasıl tanımlanacağı değil.
2016

... ama yine de çok kullanışlı ;-)
Michal Gallovic

1
ve boş değerler için değer kısmına '' koyun
Subin

41

Nginx'in apache'nin yaptığı gibi php süreçlerini yönetmediğini unutmamalısınız. Sunucunuzda php'yi çalıştıranlara bağlı olarak php-fpm veya php-cgi'yi yapılandırmalısınız.

php-cgi

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

php-fpm

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

11

Fastcgi_pass soket yeri daha sonra, ilk her gelmesi gerek fastcgi_param parametreleri. Ayrıca nginx yapılandırma klasöründeki bir dosyadaki değişkenleri listeleyebilir, ardından bu dosyayı dahil edebilirsiniz. Dahil etme dosyası genellikle fastcgi_params adını taşır . Ortam parametreleriniz php işleme bloğuna kolayca eklenebilir:

        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;
        }

Fastcgi_params nginx.conf genellikle şuna benzer aynı dizinde bulunan file:

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;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.