configura o php-fpm para funcionar apenas em um diretório e o HHVM no restante

1

Estou tentando testar o HHVM e o php-fpm no mesmo site, executando os dois. Mas eu quero que o php-fpm funcione apenas em um diretório, mas acho que não estou entendendo direito

location ~ \.(hh|php)$ {
fastcgi_pass   127.0.0.1:9000;
# or if you used a unix socket
# fastcgi_pass   unix:/var/run/hhvm/hhvm.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
include        fastcgi_params;
}
location /checkout {
fastcgi_pass    unix:/var/run/php5-fpm.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
include        fastcgi_params;
}

Eu recebo um arquivo não encontrado ao acessar / checkout

Erro do Nginx:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream

É realmente possível conseguir isso?

    
por Pyth Phytho 13.10.2014 / 12:15

1 resposta

0

Hy, eu tive exatamente a mesma pergunta. E resolvido, yay!

Apenas tente isto:

location / {
    try_files $uri $uri/ /index.php?$args;
}
location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;

    # /checkout/ or /checkout - just try it out
    if ($request_uri = '/checkout') {
        # using php-fpm
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }
    # using hhvm
    fastcgi_pass unix:/var/run/hhvm/hhvm.sock;
}

Importante: seja muito específico com o $ request_uri

Eu acho que o seu problema foi que você também tinha na sua configuração:

location / {
    try_files some_url /index.php?$args;
}

Eu acho que (bem, eu sou novo no nginx) nginx faz o seguinte:

  1. procurando local /checkout
  2. correspondendo ao location /checkout -block
  3. não é possível encontrar o script fastcgi /checkout
    • significa que nunca aplicou try_files com o /index.php?$args reescrever

Pensamentos adicionais:

Para melhor confiabilidade, uso para a rota hhvm fastcgi_pass php; e no http-block:

upstream php {
    server unix:/var/run/hhvm/hhvm.sock; # hhvm
    server unix:/var/run/php5-fpm.sock backup; # php-fpm
}

Com essa configuração, eu tenho um fallback se o hhvm travar.

Além disso, deve haver uma maneira melhor de alternar com base em $ request_uri ...

    
por 05.02.2015 / 10:27