web-dev-qa-db-fra.com

NGINX: connect () à unix: /var/run/php7.0-fpm.sock a échoué (2: aucun fichier ou répertoire de ce type)

J'essaie de suivre ce tutoriel Ansible tout en l'ajustant pour Ubuntu 16.04 avec php7. Au-dessous de ce message, vous trouverez mon fichier Ansible. Après l'avoir exécuté et essayé de visiter la page dans le navigateur, je reçois un 404, ainsi que les suivants dans les journaux des erreurs nginx:

2016/10/15 13:13:20 [crit] 28771 # 28771: * 7 connect () à unix: /var/run/php7.0-fpm.sock a échoué (2: aucun fichier ni répertoire de ce type) lors de la connexion en amont, client: 93.xxx.xxx.xx, serveur: 95.xx.xx.xx, requête: "GET/HTTP/1.1", en amont: "fastcgi: // unix: /var/run/php7.0-fpm.sock:", hôte: "95.xx.xx .xx "

J'ai donc vérifié si le fichier de socket existe et semble exister, mais ls se comporte bizarrement:

$ 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

Pourquoi ls peut-il trouver le fichier de socket si je le recherche par une partie du nom php alors qu’il ne peut pas trouver le fichier de socket lorsque j’énumère plus que php7 ou même le nom complet php7.0-fpm.sock?

Et surtout, comment puis-je faire fonctionner cela avec nginx? Tous les conseils sont les bienvenus!

ci-dessous j'ai collé mon fichier 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
21
kramer65

Eu le même problème ... La solution est très facile.

Dans le fichier de configuration nginx que vous essayez d’améliorer

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

Chemin correct est

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


Il est fait mention de cela dans documentation

Nginx communique avec PHP-FPM à l'aide d'un socket de domaine Unix. Douilles mappez sur un chemin du système de fichiers et notre installation PHP 7 utilise un nouveau fichier chemin par défaut:

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

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

31
nned

Répondre à votre première question:

Pourquoi ls peut-il trouver le fichier de socket si je le recherche par une partie du nom php alors qu’il ne peut pas trouver le fichier de socket lorsque j’énumère plus que php7 ou même le nom complet php7.0-fpm.sock?

Parce que lorsque vous exécutez Sudo ls -l /var/run/php, vous affichez le contenu du répertoire /var/run/php, mais lorsque vous exécutez Sudo ls -l /var/run/php7 ou Sudo ls -l /var/run/php7.0-fpm.sock, vous demandez des fichiers spécifiques dans son répertoire parent /var/run qui n'existent pas.

En ce qui concerne la deuxième question, cela ne semble pas être un problème Ansible, mais vous devez résoudre le problème du placement des fichiers en tenant compte de ce qui précède.

4
techraf

Editez votre fichier /etc/php/7.0/fpm/pool.d/www.conf et trouvez la ligne suivante:

listen = 127.0.0.1:9000

Et commentez-le ou remplacez-le par ce qui suit:

listen = /var/run/php7.0-fpm.sock
2
Mehdi Fekih

Dans Ubuntu 18.04, le problème pour moi était qu'il utilise actuellement PHP 7.2, mais le fichier par défaut des sites disponibles a:

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

La mise à jour de la version sur cette ligne pour que ce soit la version 7.2 au lieu de la version 7.0 a résolu le problème pour moi.

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

2
Infineight

Dans /etc/nginx/nginx.conf 

utilisateur nginx;

Si votre serveur Web travaille sous/ www-data need write 

utilisateur www-data;

0
Hakop Hakopian