Como passar parâmetros personalizados para o PHP do Nginx?

7

Estou usando Nginx 1.2.4 em combinação com PHP-FPM 5.4.8 com fastcgi pass e tentando passar parâmetros personalizados para PHP . Aqui estão as opções que encontrei até agora:

  • usando a diretiva env para definir uma variável de ambiente em nginx e buscá-la com getenv() ou $_ENV de PHP . O problema é que env opera somente em main context , ao passo que preciso definir o parâmetro em server context .

  • usando a diretiva fastcgi_param , conforme projetado para isso.

Eu tentei alterar os valores de alguns parâmetros usando fastcgi_param , mas não tive sucesso:

nginx:

fastcgi_param PATH_INFO "/var/tmp";

PHP:

Eu verifiquei todos os arrays predefinidos que encontrei:

echo '<pre>';
echo "\n".'$GLOBALS'."\n"; var_dump($GLOBALS);
echo "\n".'$_SERVER'."\n"; var_dump($_SERVER);
echo "\n".'$_GET'."\n"; var_dump($_GET);
echo "\n".'$_POST'."\n"; var_dump($_POST);
echo "\n".'$_FILES'."\n"; var_dump($_FILES);
echo "\n".'$_REQUEST'."\n"; var_dump($_REQUEST);
echo "\n".'$_SESSION'."\n"; var_dump($_SESSION);
echo "\n".'$_ENV'."\n"; var_dump($_ENV);
echo "\n".'$_COOKIE'."\n"; var_dump($_COOKIE);
echo "\n".'$php_errormsg'."\n"; var_dump($php_errormsg);
echo "\n".'$HTTP_RAW_POST_DATA'."\n"; var_dump($HTTP_RAW_POST_DATA);
echo "\n".'$http_response_header'."\n"; var_dump($http_response_header);
echo "\n".'$argc'."\n"; var_dump($argc);
echo "\n".'$argv'."\n"; var_dump($argv);
echo '</pre>';

O único a mostrar PATH_INFO foi $_SERVER :

var_dump($_SERVER); // ["PATH_INFO"]=> string(0) ""

Mas o valor definido em nginx não é levado em consideração.

Q1: Preciso configurar algo no nível nginx/php para que a diretiva fastcgi_param entre em vigor?

Q2: A diretiva fastcgi_param está limitada a uma lista predefinida de parâmetros (por exemplo, posso definir PATH_INFO , mas não variáveis personalizadas próprias, como FOO )?

Q3: Se sim para Q2: existe uma maneira de passar parâmetros personalizados para o PHP do Nginx?

    
por Max 15.11.2012 / 12:27

2 respostas

11

Você pode passar parâmetros adicionais via diretiva fastcgi_param. Tenho certeza porque usei essa funcionalidade.

Minha configuração nginx exemplificativa

server {
    server_name localhost;
    include     conf/defaults.conf;
    root        /var/www;

    location    ~* "\.php$" {
        fastcgi_param CRS "crs";
        include conf/fastcgi-php.conf;
    }                                           
}

E parte da saída do phpinfo ():

...
_SERVER["USER"] fcgi
_SERVER["HOME"] /dev/null
_SERVER["FCGI_ROLE"]    RESPONDER
_SERVER["REMOTE_USER"]  no value
_SERVER["CRS"]  crs
_SERVER["QUERY_STRING"] no value
    
por 15.11.2012 / 12:54
0

Você pode modificar a solicitação passando suas variáveis personalizadas no cabeçalho da solicitação, por exemplo:

proxy_set_header Variable-name-here Value-here;

E então você pode ler esses valores do cabeçalho da solicitação no seu script PHP.

    
por 23.05.2018 / 04:44