PHP7.0-FPM и Nginx не работают с использованием сокетов unix

У меня проблема, которая не описана в Интернете. Я использую VPS Debian 8 Nginx + PHP7.0-FPM . Мой сервер предоставляет php-файлы в исходном коде и не компилирует их, когда я настраиваю Nginx и PHP7.

все мои хосты включают этот файл, поэтому мне нужно настроить собственный сокет в каждом файле хоста. Я делаю это так:

  1. edit /etc/nginx/sites-available/example.com Я ввожу параметр fastcgi_pass там
 location ~ '\ .php $ | ^ / update.php' {
fastcgi_split_path_info ^ (. +? \. php) (| /.*)$;
fastcgi_pass unix: /var/run/php/example.com.php7.0-fpm.conf;
 включить / 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. отредактируйте основной файл пула php7.0-fpm /etc/php/7.0/fpm/pool.d/www.conf, чтобы прослушивать сокет (но теперь я не понимаю, зачем мне это здесь):

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

  2. отредактируйте файл пула моего сайта /etc/php/7.0/fpm/pool.d/example.com.conf, чтобы настроить его собственный сокет (так вот он я думаю, необходимо):

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

  3. restart services:

    service nginx restart && service php7.0-fpm restart

так что мой index.php загружается, как и когда я захожу на любую страницу сайта.

Но если я использую tcp socket fastcgi_pass 127.0.0.1:9000;, он работает нормально.

2
задан 6 September 2016 в 23:01
3 ответа

Похоже, у вас неправильное имя файла для fastcgi_pass , это должно быть:

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

Убедитесь, что php-fpm запущен и что файл сокета существует и имеет правильные разрешения для nginx на доступ к файлу. Если у вас установлен и применяется selinux, вам также может потребоваться проверить его журналы, чтобы узнать, не блокирует ли он доступ к файлу nginx.

На стороне php-fpm каждый из этих файлов конфигурации в pool.d - это отдельный пул исполняемых файлов PHP, и каждому нужен свой сокет. www.conf не является «основным» файлом конфигурации, это полностью отдельный пул процессов, и его следует отключить / удалить, если вы его не используете. Поскольку оба пула настроены на использование одного и того же сокета, здесь определенно возникает конфликт.

2
ответ дан 3 December 2019 в 09:59

Что происходит со слишком сложным местоположением ?

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

Я ожидаю, что ваши запросы на самом деле не соответствуют это.

Все, что вам действительно нужно, это:

location ~ \.php$ {
2
ответ дан 3 December 2019 в 09:59

Сокеты Unix имеют разрешения

Сокет, соединяющий php и nginx, создается службой php7.2-fpm в соответствии с конфигурацией

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

этот файл имеет

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

после запуска / перезапустите эту службу

sudo systemctl restart php7.2-fpm.service

, он создает файл, представляющий сокет с указанным владельцем и группой

ls -la /run/php

НО Nginx по умолчанию использует другого пользователя, вы можете проверить его у

sudo nano /etc/nginx/nginx.conf

пользователя nginx;

Теперь он работает вам, как вы хотите настроить разрешения. Либо предоставьте больше прав для файла сокета, либо смените пользователя для прослушивания, либо измените пользователя nginx ... вы выбираете свой ответ.

0
ответ дан 3 December 2019 в 09:59

Теги

Похожие вопросы