2016-01-11 1 views
2

J'ai besoin de définir une variable d'environnement nommée SQLANY17 et cette variable devrait être disponible en PHP (c'est-à-dire sous "Environnement" dans la page standard phpinfo()). PHP est exécuté via FastCGI et j'utilise CentOS 7 x64, Apache 2.4.6 et PHP 5.5.30. J'ai édité /etc/httpd/conf.d/fcgid.conf qui existe déjà dans ma distribution. According to the documentation un environnement peut être défini à l'aide de FcgidInitialEnv.Comment définir une variable d'environnement en PHP avec Apache/FastCGI?

<IfModule mod_fcgid.c> 
    # ... 
    FcgidInitialEnv SQLANY17 /opt/sqlanywhere17 
</IfModule> 

Cependant cela ne fonctionne pas, même après un redémarrage complet de la machine. Des idées? Je suis sûr que le fcgid.conf est correctement analysé car la saisie de caractères aléatoires empêche le redémarrage du serveur Apache.

enter image description here

Dans ma configuration demandes de procurations Nginx à Apache C'est nginx.conf pour l'hôte example.com:

server { 
    listen 192.168.1.131:80; 

    server_name example.com; 
    server_name www.example.com; 
    server_name ipv4.example.com; 

    client_max_body_size 128m; 

    root "/var/www/vhosts/example.com/httpdocs"; 
    access_log "/var/www/vhosts/system/example.com/logs/proxy_access_log"; 
    error_log "/var/www/vhosts/system/example.com/logs/proxy_error_log"; 

    if ($host ~* ^www.example.com$) { 
     rewrite ^(.*)$ http://example.com$1 permanent; 
    } 

    location/{ 
     proxy_pass http://192.168.1.131:7080; 
     proxy_set_header Host    $host; 
     proxy_set_header X-Real-IP  $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Accel-Internal /internal-nginx-static-location; 
     access_log off; 
    } 
} 

Et cela est httpd.conf pour le même hôte:

<VirtualHost 192.168.1.131:7080 > 
    ServerName "example.com:80" 
    ServerAlias "www.example.com" 
    ServerAlias "ipv4.example.com" 
    ServerAdmin "[email protected]" 
    UseCanonicalName Off 

    DocumentRoot "/var/www/vhosts/example.com/httpdocs" 
    CustomLog /var/www/vhosts/system/example.com/logs/access_log 
    ErrorLog "/var/www/vhosts/system/example.com/logs/error_log" 

    <IfModule mod_suexec.c> 
     SuexecUserGroup "example" "psacln" 
    </IfModule> 

    <IfModule mod_fcgid.c> 
     FcgidInitialEnv PP_CUSTOM_PHP_INI /var/www/vhosts/system/example.com/etc/php.ini 
     FcgidInitialEnv PP_CUSTOM_PHP_CGI_INDEX plesk-php55-fastcgi 
     FcgidMaxRequestLen 134217728 
    </IfModule> 

    <Directory /var/www/vhosts/example.com/httpdocs> 
     <IfModule mod_fcgid.c> 
      <Files ~ (\.php$)> 
       SetHandler fcgid-script 
       FCGIWrapper /var/www/cgi-bin/cgi_wrapper/cgi_wrapper .php 
       Options +ExecCGI 
      </Files> 
     </IfModule> 

     Options -Includes -ExecCGI 
    </Directory> 

    <IfModule mod_rewrite.c> 
     RewriteEngine On 
     RewriteCond %{HTTP_HOST} ^www.example.com$ [NC] 
     RewriteRule ^(.*)$ http://example.com$1 [L,R=301] 
    </IfModule> 
</VirtualHost> 

Répondre

0

Première , vous devez vous assurer que le module est chargé. Êtes-vous sûr que c'est?

Les applications PHP sont généralement configurées à l'aide de la directive FcgidWrapper et d'un script wrapper correspondant. Le script wrapper peut être un endroit approprié pour définir les variables d'environnement requises par l'application, telles que PHP_FCGI_MAX_REQUESTS ou toute autre chose. (Variables d'environnement peuvent également être définies avec FcgidInitialEnv, mais ils appliquent ensuite à toutes les applications.)

Voici un exemple qui utilise un script wrapper pour appeler PHP:

application PHP -/usr/local/phpapp/phpinfo.php

<?php 
phpinfo(); 
?> 

directives de configuration

# FcgidMaxRequestsPerProcess should be <= PHP_FCGI_MAX_REQUESTS 
# The example PHP wrapper script overrides the default PHP setting. 
FcgidMaxRequestsPerProcess 10000 

# Uncomment the following line if cgi.fix_pathinfo is set to 1 in 
# php.ini: 
# FcgidFixPathinfo 1 

Alias /phpapp/ /usr/local/phpapp/ 
<Location /phpapp/> 
AddHandler fcgid-script .php 
Options +ExecCGI 
FcgidWrapper /usr/local/bin/php-wrapper .php 

# Customize the next two directives for your requirements. 
Order allow,deny 
Allow from all 
</Location> 

script wrapper PHP -/usr/local/bin/php-wrapper

#!/bin/sh 
# Set desired PHP_FCGI_* environment variables. 
# Example: 
# PHP FastCGI processes exit after 500 requests by default. 
PHP_FCGI_MAX_REQUESTS=10000 
export PHP_FCGI_MAX_REQUESTS 

# Replace with the path to your FastCGI-enabled PHP executable 
exec /usr/local/bin/php-cgi 

Referenced: http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html

+0

Salut, merci pour aider. Je veux définir cette variable d'environnement pour toutes les applications: serveur est un hôte virtuel géré avec Plesk et sans cette variable d'environnement, PHP ne réussirait pas à charger une extension (c'est-à-dire SQL Anywhere) et à son tour écraser les autres processus Plesk. Dans mon système, le php-wrapper est déjà défini par Plesk et c'est un binaire, pas un script shell (/ var/www/cgi-bin/cgi_wrapper/cgi_wrapper). Je ne peux pas utiliser votre solution. Une idée de pourquoi la mienne ne fonctionne pas? – gremo

+0

Etes-vous sûr que le module est chargé? Basé sur ce que vous avez posté, il semble que ce n'est pas réellement chargé. Dans le cas contraire, vous devez publier la totalité de votre configuration httpd, mais assurez-vous de charger le module fastcgi quelque part. – mikeb

+0

FastCGI fonctionne. J'ai mis à jour ma question avec la configuration complète et comme vous pouvez voir Nnginx agir comme un proxy devant Apache qui à son tour utilise FastCGI. – gremo