NGINX: connect() для unix:/var/run/php7.0-fpm.sock failed (2: Нет такого файла или каталога)

Я пытаюсь следовать этому Ansible tutorial, настраивая его для Ubuntu 16.04 с php7. Ниже этого сообщения вы найдете мой файл Ansible. После запуска и поиска страницы в браузере я получаю 404, а в журналах ошибок nginx:

2016/10/15 13:13:20 [crit] 28771 # 28771: * 7 connect() to unix:/var/run/php7.0-fpm.sock failed (2: Нет такого файла или каталога) при подключении к восходящему потоку клиент: 93.xxx.xxx.xx, сервер: 95.xx.xx.xx, запрос: "GET/HTTP/1.1", вверх по течению: "fastcgi://unix:/var/run/php7.0-fpm.sock:", host: "95.xx.xx.xx"

Итак, я проверил, существует ли файл сокета, и он, кажется, существует, но ls ведет себя странно:

$ sudo ls -l /var/run/php
total 4
-rw-r--r-- 1 root     root     5 Oct 15 13:00 php7.0-fpm.pid
srw-rw---- 1 www-data www-data 0 Oct 15 13:00 php7.0-fpm.sock
$ sudo ls -l /var/run/php7
ls: cannot access '/var/run/php7': No such file or directory
$ sudo ls -l /var/run/php7.0-fpm.sock
ls: cannot access '/var/run/php7.0-fpm.sock': No such file or directory

Почему ls может найти файл сокета, если я ищу его по имени имени php, пока он не может найти файл сокета, когда я перечисляю больше, чем php7 или даже полное имя php7.0-fpm.sock?

И самое главное, как я могу сделать эту работу с nginx? Все советы приветствуются!

ниже Я вставил свой файл Ansible

---
- hosts: php
  become: true

  tasks:
  - name: install packages
    apt: name={{ item }} update_cache=yes state=latest
    with_items:
      - git
      - mcrypt
      - nginx
      - php-cli
      - php-curl
      - php-fpm
      - php-intl
      - php-json
      - php-mcrypt
      - php-mbstring
      - php-sqlite3
      - php-xml
      - sqlite3

  - name: enable mbstring
    shell: phpenmod mbstring
    notify:
      - restart php7.0-fpm
      - restart nginx

  - name: create /var/www/ directory
    file: dest=/var/www/ state=directory owner=www-data group=www-data mode=0700

  - name: Clone git repository
    git: >
      dest=/var/www/laravel
      repo=https://github.com/laravel/laravel.git
      update=no
    become: true
    become_user: www-data
    register: cloned

  - name: install composer
    shell: curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
    args:
      creates: /usr/local/bin/composer

  - name: composer create-project
    composer: command=create-project working_dir=/var/www/laravel optimize_autoloader=no
    become: true
    become_user: www-data
    when: cloned|changed

  - name: set APP_DEBUG=false
    lineinfile: dest=/var/www/laravel/.env regexp='^APP_DEBUG=' line=APP_DEBUG=false

  - name: set APP_ENV=production
    lineinfile: dest=/var/www/laravel/.env regexp='^APP_ENV=' line=APP_ENV=production

  - name: Configure nginx
    template: src=nginx.conf dest=/etc/nginx/sites-available/default
    notify:
      - restart php5-fpm
      - restart nginx

  handlers:
    - name: restart php7.0-fpm
      service: name=php7.0-fpm state=restarted

    - name: restart nginx
      service: name=nginx state=restarted

    - name: reload nginx
      service: name=nginx state=reloaded

Ответ 1

Была такая же проблема. Решение очень просто.

В файле nginx conf вы пытаетесь переходить на

unix:/var/run/php7.0-fpm.sock

Правильный путь

unix:/var/run/php/php7.0-fpm.sock


В документе упоминается об этом

Nginx взаимодействует с PHP-FPM с использованием сокета домена Unix. Розетки сопоставить путь к файловой системе, и наша установка PHP 7 использует новую путь по умолчанию:

PHP 5 /var/run/php5-fpm.sock

PHP 7 /var/run/php/php7.0-fpm.sock

Ответ 2

В Ubuntu 18.04 проблема для меня заключалась в том, что в настоящее время он использует PHP 7.2, но файл по умолчанию, доступный для сайтов, имеет:

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

Обновление версии в этой строке так, чтобы это 7.2 вместо 7.0 решило проблему для меня.

fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;

Ответ 3

Отредактируйте файл /etc/php/7.0/fpm/pool.d/www.conf и найдите следующую строку:

listen = 127.0.0.1:9000

И прокомментируйте это или замените его следующим:

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

Ответ 4

Отвечая на ваш первый вопрос:

Зачем ls находить файл сокета, если я его ищу по части имени php, пока он не может найти файл сокета, когда я перечисляю больше php7 или даже полное имя php7.0-fpm.sock?

Поскольку при запуске sudo ls -l /var/run/php вы показываете содержимое каталога /var/run/php, но при запуске sudo ls -l /var/run/php7 или sudo ls -l /var/run/php7.0-fpm.sock вы запрашиваете определенные файлы в его родительском каталоге /var/run, которых не существует.

Что касается второго вопроса, это не кажется проблемой Ansible, но вам необходимо устранить проблему размещения файлов с учетом вышеизложенного.

Ответ 5

В /etc/nginx/nginx.conf

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

Если ваш веб-сервер работает на пользователя www-data , нужно написать

пользовательские www-данные;

Ответ 6

Проверить статус:

sudo service php7.0-fpm status

ИЛИ

sudo systemctl status php7.0-fpm

Попробуйте, если он уже запущен

sudo service php7.0-fpm restart

ИЛИ

sudo systemctl reload php7.0-fpm

Остальное попробуй с

sudo service php7.0-fpm start

ИЛИ

sudo systemctl start php7.0-fpm