PHP7.0-FPM e Nginx não funcionam usando soquetes unix

2

Eu tenho um problema que não está descrito na web. Eu estou usando o VPS Debian 8 Nginx + PHP7.0-FPM . Meu servidor fornece arquivos php em um código-fonte e não os compila quando eu configuro o Nginx e o PHP7.0-FPM para usar soquetes unix (eu faço isso porque eu li ele funciona mais rápido que o tcp conexões).

Então, o que eu realmente faço e não funciona :

  1. edite o / etc / nginx / fastcgi_params para comentar o parâmetro fastcgi_pass para usar o arquivo de soquete unix:
#fastcgi_pass    127.0.0.1:9000;

todos os meus hosts incluem esse arquivo, portanto, preciso configurar o próprio soquete em cada arquivo host. Eu faço assim:

  1. edite o /etc/nginx/sites-available/example.com Eu digito o parâmetro fastcgi_pass lá
location ~ '\.php$|^/update.php' {
fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
fastcgi_pass      unix:/var/run/php/example.com.php7.0-fpm.conf;
        include             /etc/nginx/fastcgi_params;

        fastcgi_param       SCRIPT_FILENAME     /var/www/example.com/www$fastcgi_script_name;
        fastcgi_param       DOCUMENT_ROOT       /var/www/example.com/www;

        fastcgi_param       PHP_ADMIN_VALUE     upload_tmp_dir=/var/www/example.com/tmp/upload;
        fastcgi_param       PHP_ADMIN_VALUE     session.save_path=/var/www/example.com/tmp/sessions;
    }
  1. edite o arquivo principal do arquivo php7.0-fpm /etc/php/7.0/fpm/pool.d/www.conf para ouvir o soquete (mas agora não consigo entender porque eu preciso dele aqui):

    listen = /var/run/php/php7.0-fpm.sock

  2. edite o arquivo de pool do meu site /etc/php/7.0/fpm/pool.d/example.com.conf para configurar seu próprio soquete (então, aqui é necessário, eu acho):

    listen = /var/run/php/example.com.php7.0-fpm.sock

  3. reiniciar serviços:

    serviço nginx restart & & serviço php7.0-fpm restart

, então isso faz com que o meu index.php seja baixado como quando eu visito qualquer página do site.

Mas se eu usar o soquete tcp fastcgi_pass 127.0.0.1:9000; , tudo funcionará bem.

    
por tlito 06.09.2016 / 21:59

3 respostas

2

Parece que você tem o nome de arquivo incorreto para fastcgi_pass , deve ser:

fastcgi_pass      unix:/var/run/php/example.com.php7.0-fpm.sock;

Certifique-se de que o php-fpm esteja em execução e que o arquivo de soquete exista e tenha as permissões corretas para o nginx acessarem o arquivo. Se você tiver o selinux instalado e impondo, talvez também seja necessário verificar seus logs para ver se ele está impedindo que o nginx acesse o arquivo.

No lado do php-fpm, cada um desses arquivos de configuração em pool.d é um conjunto separado de executáveis PHP e cada um precisa de seu próprio soquete. www.conf não é um arquivo de configuração "principal", é um conjunto completamente separado de processos e deve ser desativado / removido se você não estiver usando. Com os dois pools configurados para usar o mesmo soquete, certamente há um conflito aqui.

    
por 07.09.2016 / 00:16
2

O que está acontecendo com o complicado location ?

location ~ '\.php$|^/update.php' {

Espero que suas solicitações não correspondam a isso.

Tudo o que você realmente precisa é:

location ~ \.php$ {
    
por 06.09.2016 / 22:37
0

Unix sockets tem permissões

O socket que conecta o php e o nginx é criado pelo serviço php7.2-fpm de acordo com a configuração

sudo nano /etc/php/7.2/fpm/pool.d/www.conf

este arquivo tem

listen = /run/php/php7.2-fpm.sock
listen.owner = www-data
listen.group = www-data

depois de iniciar / reiniciar este serviço

sudo systemctl restart php7.2-fpm.service

cria um arquivo que representa um soquete com o proprietário e o grupo especificados

ls -la /run/php

MAS o Nginx está usando outro usuário por padrão, você pode veiculá-lo em

sudo nano /etc/nginx/nginx.conf

user nginx;

Agora é com você, como você deseja ajustar as permissões. Dê mais permissões ao seu arquivo de socket, ou mude um usuário que esteja ouvindo, ou mude o usuário nginx ... você escolhe sua resposta.

    
por 03.12.2018 / 03:38