Como usar diferentes pools PHP-FPM baseados no diretório com diferentes raízes no Nginx

1

Estou tentando migrar alguns sites de um servidor mais antigo, executando o Apache e o mod_php, para um novo servidor com o Nginx e o PHP 7, usando o PHP-FPM. Os dois sites executam um carrinho de compras PHP na raiz do domínio e um blog do wordpress em execução na subpasta / notícias. No momento, nos servidores antigos, o word press blog está em uma pasta chamada news in the web root (assim misturada com os arquivos de carrinhos de compras) no novo servidor que eu gostaria de dividi-los para que cada aplicativo viva em sua própria pasta separada, de tal forma que:

Os arquivos em / home / www / sitename / cart / htdocs estão disponíveis no link

e

Os arquivos em / home / www / sitename / wordpress / htdocs estão disponíveis no link

Eu também gostaria de poder usar diferentes pools PHP-FPM para segurança e, se necessário, permitir que eu execute qualquer um dos aplicativos com um pool PHP 5 até que ele possa ser atualizado para rodar no PHP 7.

Eu cheguei perto, mas ele continua tentando carregar o /news/test.php de /home/www/sitename/wordpress/htdocs//news/test.php em vez de /home/www/manicpanic/wordpress/htdocs/test.php.

Configuração:

server {
    listen iphere:443 ssl http2;

    #ssl conf

    root /home/www/sitename/cart/htdocs;    
    server_name site.tld www.site.tld;

    rewrite ^(.*)\.v[\d]+\.(css|js|png)$ $1.$2;

    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
        expires 30d;
        add_header Pragma public;
        add_header Cache-Control "public";
    }

    location / {
        index index.php index.html index.htm;
        try_files $uri $uri/ /index.html;
    }

    location /news {
        alias /home/www/sitename/wordpress/htdocs;
        location ~ \.php$ {
                fastcgi_pass unix:/run/php/php7.0-fpm-wordpress.sock;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param APPLICATION_ENV production;
                include fastcgi_params;
                fastcgi_index index.php;
                fastcgi_param PHP_VALUE default_charset=ISO-8859-1;
            }

    }

    location ~ [^/]\.php(/|$) {
        fastcgi_pass unix:/run/php/php7.0-fpm-cart.sock;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param APPLICATION_ENV production;
        include fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param PHP_VALUE default_charset=ISO-8859-1;
    }

}
    
por Technofrood 07.03.2017 / 16:59

2 respostas

1

A expressão regular location ~ [^/]\.php(/|$) terá precedência sobre o prefixo location /news , a menos que você use o modificador ^~ . Consulte este documento para saber mais.

location ^~ /news {
    alias /home/www/sitename/wordpress/htdocs;
    location ~ \.php$ {
        ...
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        ...
    }
}

Além disso, você não pode usar $document_root$fastcgi_script_name em conjunto com alias , pois cria o nome do caminho errado. Use $request_filename em vez disso.

Sempre include fastcgi_params; antes usando diretivas fastcgi_param específicas, caso contrário, as configurações específicas poderão ser sobrescritas silenciosamente.

    
por 07.03.2017 / 17:36
0

Há um tutorial super legal (embora você provavelmente possa pular configurações de portas diferentes): link

PHP70

server {
    listen 8870 default_server;
    listen [::]:8870 default_server;
    server_name _;
    root /var/www/site-with-php7.0;
    index index.php;
    location / {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock; # adjust for the listen setting discussed above
    }
}

PHP56

server {
    listen 8856 default_server;
    listen [::]:8856 default_server;
    server_name _;
    root /var/www/site-with-php5.6;
    index index.php;
    location / {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php5.6-fpm.sock; # adjust for the listen setting discussed above
    }
}
    
por 22.01.2018 / 14:47