Vários locais de proxy_pass com php

1

Eu gostaria de ter duas localizações de proxy_pass e uma localização genérica do php-fpm, de modo que qualquer solicitação .php seja encaminhada para o fpm-php, mas qualquer solicitação para / el / ... ou / gl / ... vá para esses locais. Isso é o que eu tenho até agora:

server {
listen *:443 ssl;    

ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;

client_max_body_size 108M;

access_log /var/log/nginx/access.log;

root /var/www/public;
index index.php;

if (!-e $request_filename) {
    rewrite ^.*$ /index.php last;
}

location /es/ {
    proxy_pass http://<my-domain>:8200/;
}

location /gl/ {
    proxy_pass http://<my-domain>:3000/;
}

location / {

   location ~ \.php$ {
       fastcgi_pass <my-domain>:9000;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PHP_VALUE "error_log=/var/log/nginx/php_errors.log";
       fastcgi_buffers 16 16k;
       fastcgi_buffer_size 32k;
       include fastcgi_params;
  }
}
}

Esta configuração falha em todas as três contagens. No entanto, removendo todo o local do php e a declaração 'if' funciona para os locais / es / e / gl /, então eu acho que não estou fazendo o bit php corretamente. Qual a melhor maneira de alcançar isto? Obrigado.

    
por Zuriar 06.09.2016 / 11:06

1 resposta

1

Você deve reescrever:

if (!-e $request_filename) { rewrite ^.*$ /index.php last; }

como:

try_files $uri $uri/ /index.php;

e mova-o para o bloco location / , para evitar conflitos desagradáveis com as declarações globais if e rewrite .

Use o modificador ^~ nos locais de prefixo que têm precedência sobre os locais de expressão regular. Consulte este documento para obter detalhes.

Por exemplo:

root /var/www/public;
index index.php;

location ^~ /es/ {
    proxy_pass http://<my-domain>:8200/;
}

location ^~ /gl/ {
    proxy_pass http://<my-domain>:3000/;
}

location / {
    try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
    try_files $uri =404;

    fastcgi_pass <my-domain>:9000;
    include fastcgi_params;

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "error_log=/var/log/nginx/php_errors.log";
    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;
}

Coloque suas declarações fastcgi_param após include fastcgi_params; para evitar que sejam silenciosamente substituídas pelo arquivo incluído.

    
por 06.09.2016 / 12:07