it-swarm.com.de

NGINX: connect () mit Unix: /var/run/php7.0-fpm.sock fehlgeschlagen (2: Keine solche Datei oder Verzeichnis)

Ich versuche, diesem Ansible-Tutorial zu folgen, während ich es für Ubuntu 16.04 mit PHP 7 einstelle. Unter dieser Nachricht finden Sie meine Ansible-Datei. Nachdem ich es ausgeführt habe und versucht habe, die Seite im Browser aufzurufen, bekomme ich eine 404 und folgende in den Nginx-Fehlerprotokollen:

15.10.2016 13:13:20 [krit] 28771 # 28771: * 7 connect () mit Unix: /var/run/php7.0-fpm.sock fehlgeschlagen (2: Keine solche Datei oder ein solches Verzeichnis) Bei der Verbindung zum Upstream-Client: 93.xxx.xxx.xx, Server: 95.xx.xx.xx, Anforderung: "GET/HTTP/1.1", Upstream: "fastcgi: // unix: /var/run/php7.0-fpm.sock:", Host: "95.xx.xx .xx "

Also habe ich überprüft, ob die Socket-Datei existiert, und es scheint zu existieren, aber ls verhält sich komisch:

$ 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

Warum kann ls die Socket-Datei finden, wenn ich sie nach einem Teil des Namens php durchsuche, während sie die Socket-Datei nicht finden kann, wenn ich mehr als diesen php7 oder sogar den vollständigen Namen php7.0-fpm.sock aufliste?

Und vor allem, wie kann ich das mit Nginx funktionieren lassen? Alle Tipps sind willkommen!

unten habe ich meine Ansible-Datei eingefügt

---
- 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

Hatte dasselbe Problem ... Die Lösung ist sehr einfach.

In der Nginx-Conf-Datei versuchen Sie, das Upstreaming durchzuführen

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

Richtiger Pfad ist

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


Es wird erwähnt in Dokumentation

Nginx kommuniziert mit PHP-FPM über einen Unix-Domänensocket. Steckdosen map einem Pfad im Dateisystem zuordnen, und bei der Installation von PHP 7 wird ein neues .__ verwendet. Pfad standardmäßig:

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

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

31
nned

Beantwortung Ihrer ersten Frage:

Warum kann ls die Socket-Datei finden, wenn ich sie nach einem Teil des Namens php durchsuche, während sie die Socket-Datei nicht finden kann, wenn ich mehr als diesen php7 oder sogar den vollständigen Namen php7.0-fpm.sock aufliste?

Denn wenn Sie Sudo ls -l /var/run/php ausführen, zeigen Sie den Inhalt des /var/run/php-Verzeichnisses an, aber wenn Sie Sudo ls -l /var/run/php7 oder Sudo ls -l /var/run/php7.0-fpm.sock ausführen, fragen Sie nach bestimmten Dateien im übergeordneten Verzeichnis /var/run, die nicht vorhanden sind.

Bei der zweiten Frage scheint es sich nicht um ein Ansible-Problem zu handeln, aber Sie müssen die Platzierung von Dateien unter Berücksichtigung der oben genannten Probleme prüfen.

4
techraf

Bearbeiten Sie Ihre /etc/php/7.0/fpm/pool.d/www.conf -Datei und suchen Sie die folgende Zeile:

listen = 127.0.0.1:9000

Und kommentieren Sie es aus oder ersetzen Sie es durch Folgendes:

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

In Ubuntu 18.04 bestand das Problem für mich darin, dass derzeit PHP 7.2 verwendet wird, die standardmäßige Site-Datei hat jedoch

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

Das Aktualisieren der Version in dieser Zeile, sodass 7.2 anstelle von 7.0 angezeigt wird, hat das Problem für mich behoben.

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

2
Infineight

In /etc/nginx/nginx.conf 

benutzer nginx;

Wenn Ihr Webserver unter user www-data arbeitet, müssen Sie schreiben 

benutzer www-Daten;

0
Hakop Hakopian

Status überprüfen:

Sudo service php7.0-fpm status

OR

Sudo systemctl status php7.0-fpm

Versuchen Sie es mit, wenn bereits ausgeführt

Sudo service php7.0-fpm restart

OR

Sudo systemctl reload php7.0-fpm

Sonst versuche es mit

Sudo service php7.0-fpm start

OR

Sudo systemctl start php7.0-fpm
0
itsazzad