我正在尝试跟随this Ansible tutorial,同时使用php7调整Ubuntu 16.04。在此消息下方,您将找到我的Ansible文件。运行它并尝试在浏览器中访问该页面后,我得到一个404,以及nginx错误日志中的以下内容:
2016/10/15 13:13:20 [暴击] 28771#28771:* 7 connect()to unix:/var/run/php7.0-fpm.sock失败(2:没有这样的文件或目录) 连接到上游时,客户端:93.xxx.xxx.xx,服务器: 95.xx.xx.xx,请求:“GET / HTTP / 1.1”,上游:“fastcgi:// unix:/var/run/php7.0-fpm.sock:”,主机:“95.xx.xx .XX“
所以我检查了socket文件是否存在,它似乎存在,但是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
为什么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
答案 0 :(得分:36)
有同样的问题。 解决方案非常简单。
在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
答案 1 :(得分:4)
回答你的第一个问题:
为什么
ls
可以找到套接字文件,如果我按名称php
的一部分搜索它,而当我列出的内容超过php7
时甚至无法找到套接字文件姓名php7.0-fpm.sock
?
因为当您运行sudo ls -l /var/run/php
时,您正在显示/var/run/php
目录的内容,但是当您运行sudo ls -l /var/run/php7
或sudo ls -l /var/run/php7.0-fpm.sock
时,您要求其父目录中的特定文件/var/run
不存在。
关于第二个问题,它似乎不是一个Ansible问题,但考虑到上述情况,您需要对文件的位置进行故障排除。
答案 2 :(得分:3)
编辑 /etc/php/7.0/fpm/pool.d/www.conf 文件,找到以下行:
listen = 127.0.0.1:9000
并将其评论或替换为以下内容:
listen = /var/run/php7.0-fpm.sock
答案 3 :(得分:2)
在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;
答案 4 :(得分:1)
.app
OR
sudo service php7.0-fpm status
sudo systemctl status php7.0-fpm
OR
sudo service php7.0-fpm restart
sudo systemctl reload php7.0-fpm
OR
sudo service php7.0-fpm start
答案 5 :(得分:0)
在/etc/nginx/nginx.conf
用户nginx;
如果您的Web服务器在用户 www-data 上工作,则需要写
用户www-data;