NGINX: connect() to unix:/var/run/php7.0-fpm.sock

2019-03-23 17:32发布

I'm trying to follow this Ansible tutorial while adjusting it for Ubuntu 16.04 with php7. Below this message you'll find my Ansible file. After running it and trying to visit the page in the browser I get a 404, and the following in the nginx error logs:

2016/10/15 13:13:20 [crit] 28771#28771: *7 connect() to unix:/var/run/php7.0-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 93.xxx.xxx.xx, server: 95.xx.xx.xx, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php7.0-fpm.sock:", host: "95.xx.xx.xx"

So I checked if the socket file exists, and it seems to exist, but ls behaves weird:

$ 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

Why can ls find the socket file if I search it by part of the name php while it cannot find the socket file when I list more than that php7 or even the full name php7.0-fpm.sock?

And most importantly, how can I make this work with nginx? All tips are welcome!

below I pasted my Ansible file

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

5条回答
可以哭但决不认输i
2楼-- · 2019-03-23 17:42

In /etc/nginx/nginx.conf

user nginx;

If you web server work at user www-data need write

user www-data;

查看更多
女痞
3楼-- · 2019-03-23 17:44

Edit your /etc/php/7.0/fpm/pool.d/www.conf file and find the following line:

listen = 127.0.0.1:9000

And comment it out or replace it with the following:

listen = /var/run/php7.0-fpm.sock
查看更多
小情绪 Triste *
4楼-- · 2019-03-23 18:02

Answering your first question:

Why can ls find the socket file if I search it by part of the name php while it cannot find the socket file when I list more than that php7 or even the full name php7.0-fpm.sock?

Because when you run sudo ls -l /var/run/php you are displaying the contents of the /var/run/php directory, but when you run sudo ls -l /var/run/php7 or sudo ls -l /var/run/php7.0-fpm.sock you ask for specific files in its parent directory /var/run which do not exist.

As for the second question, it does not seem an Ansible problem, but you need to troubleshoot the placement of files considering the above.

查看更多
Animai°情兽
5楼-- · 2019-03-23 18:03

Had same problem. Solution is very easy.

In nginx conf file you are trying upstreaming to

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

Correct path is

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


There is mention abou this in documentation

Nginx communicates with PHP-FPM using a Unix domain socket. Sockets map to a path on the filesystem, and our PHP 7 installation uses a new path by default:

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

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

查看更多
狗以群分
6楼-- · 2019-03-23 18:04

In Ubuntu 18.04 the problem for me was that it's currently using PHP 7.2, but the sites-available default file has:

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

Updating the version on that line so that it's the 7.2 instead of 7.0 fixed the issue for me.

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

查看更多
登录 后发表回答