NGINX:connect()到unix:/var/run/php7.0-fpm.sock失败(2:没有这样的文件或目录)

kra*_*r65 27 php sockets linux nginx ansible

我正在尝试按照这个Ansible教程,同时使用php7调整Ubuntu 16.04.在此消息下方,您将找到我的Ansible文件.运行它并尝试在浏览器中访问该页面后,我得到一个404,以及nginx错误日志中的以下内容:

2016/10/15 13:13:20 [暴击] 28771#28771:*7连接()到unix:/var/run/php7.0-fpm.sock失败(2:没有这样的文件或目录)连接到upstream,client:93.xxx.xxx.xx,server:95.xx.xx.xx,request:"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
Run Code Online (Sandbox Code Playgroud)

为什么可以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
Run Code Online (Sandbox Code Playgroud)

小智 43

有同样的问题.解决方案非常简单.

在nginx conf文件中,您正在尝试上游

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

正确的道路是

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


文档中提到了这一点

Nginx使用Unix域套接字与PHP-FPM通信.套接字映射到文件系统上的路径,我们的PHP 7安装默认使用新路径:

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

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


Inf*_*ght 8

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


its*_*zad 6

检查状态:

sudo service php7.0-fpm status
Run Code Online (Sandbox Code Playgroud)

或者

sudo systemctl status php7.0-fpm
Run Code Online (Sandbox Code Playgroud)

如果已经运行,请尝试

sudo service php7.0-fpm restart
Run Code Online (Sandbox Code Playgroud)

或者

sudo systemctl reload php7.0-fpm
Run Code Online (Sandbox Code Playgroud)

否则尝试

sudo service php7.0-fpm start
Run Code Online (Sandbox Code Playgroud)

或者

sudo systemctl start php7.0-fpm
Run Code Online (Sandbox Code Playgroud)


小智 5

编辑您的/etc/php/7.0/fpm/pool.d/www.conf文件并找到以下行:

listen = 127.0.0.1:9000
Run Code Online (Sandbox Code Playgroud)

并注释掉它或将其替换为以下内容:

listen = /var/run/php7.0-fpm.sock
Run Code Online (Sandbox Code Playgroud)