php5 - NGINX: connect() a unix:/var/run/php7.0-fpm.sock falló(2: No existe tal archivo o directorio)
php7 2 fpm service (5)
Edite su archivo /etc/php/7.0/fpm/pool.d/www.conf y encuentre la siguiente línea:
listen = 127.0.0.1:9000
Y coméntalo o reemplázalo con lo siguiente:
listen = /var/run/php7.0-fpm.sock
Estoy tratando de seguir este tutorial de Ansible mientras lo ajuste para Ubuntu 16.04 con php7. Debajo de este mensaje encontrarás mi archivo Ansible. Después de ejecutarlo e intentar visitar la página en el navegador, obtengo un 404 y lo siguiente en los registros de error de nginx:
10/10/2016 13:13:20 [crit] 28771 # 28771: * 7 connect () a unix: /var/run/php7.0-fpm.sock falló (2: No existe tal archivo o directorio) al conectarse a upstream, cliente: 93.xxx.xxx.xx, servidor: 95.xx.xx.xx, solicitud: "GET / HTTP / 1.1", upstream: "fastcgi: // unix: /var/run/php7.0- fpm.sock: ", host:" 95.xx.xx.xx "
Así que verifiqué si el archivo de socket existe y parece existir, pero ls
comporta raro:
$ 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
¿Por qué ls
puede encontrar el archivo de socket si lo busco por parte del nombre php
mientras no puedo encontrar el archivo de socket cuando enumero más de ese php7
o incluso el nombre completo php7.0-fpm.sock
?
Y lo más importante, ¿cómo puedo hacer que esto funcione con nginx? Todos los consejos son bienvenidos!
a continuación pegué mi archivo 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
En /etc/nginx/nginx.conf
usuario nginx;
Si el servidor web trabaja en el usuario www-data necesita escribir
usuario www-data;
En Ubuntu 18.04, el problema para mí fue que actualmente está usando PHP 7.2, pero el archivo predeterminado de sitios disponibles tiene:
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
Actualizar la versión en esa línea para que sea la 7.2 en lugar de 7.0 solucionó el problema para mí.
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
Respondiendo tu primera pregunta:
¿Por qué
ls
puede encontrar el archivo de socket si lo busco por parte del nombrephp
mientras no puedo encontrar el archivo de socket cuando enumero más de esephp7
o incluso el nombre completophp7.0-fpm.sock
?
Porque cuando ejecuta sudo ls -l /var/run/php
está mostrando el contenido del directorio /var/run/php
, pero cuando ejecuta sudo ls -l /var/run/php7
o sudo ls -l /var/run/php7.0-fpm.sock
usted solicita archivos específicos en su directorio principal /var/run
que no existen.
En cuanto a la segunda pregunta, no parece ser un problema Ansible, pero debe solucionar la ubicación de los archivos considerando lo anterior.
Tuvo el mismo problema. La solución es muy fácil.
En el archivo conf nginx está intentando upstreaming a
unix:/var/run/php7.0-fpm.sock
La ruta correcta es
unix:/var/run/php/php7.0-fpm.sock
Se menciona esto en la documentation
Nginx se comunica con PHP-FPM utilizando un socket de dominio Unix. Los sockets se asignan a una ruta en el sistema de archivos, y nuestra instalación de PHP 7 usa una nueva ruta de manera predeterminada:
PHP 5
/var/run/php5-fpm.sock
PHP 7
/var/run/php/php7.0-fpm.sock