Php7でUbuntu 16.04に合わせて調整しながら このAnsibleチュートリアル を実行しようとしています。このメッセージの下に、私のAnsibleファイルがあります。実行してブラウザでページにアクセスしようとすると、404が表示され、nginxエラーログに次のように記録されます。
2016/10/15 13:13:20 [crit] 28771#28771:* 7への接続中にunix:/var/run/php7.0-fpm.sockへのconnect()が失敗しました(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 "
そこで、ソケットファイルが存在するかどうかを確認し、存在するようですが、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
同じ問題がありました。解決策は非常に簡単です。
Nginx confファイルでは、アップストリーム化を試みています
unix:/var/run/php7.0-fpm.sock
正しいパスは
unix:/var/run/php/php7.0-fpm.sock
documentation にこれに関する言及があります
Nginxは、Unixドメインソケットを使用してPHP-FPMと通信します。ソケットはファイルシステム上のパスにマップされ、PHP 7インストールはデフォルトで新しいパスを使用します。
PHP 5
/var/run/php5-fpm.sock
PHP 7
/var/run/php/php7.0-fpm.sock
Ubuntu 18.04での問題は、現在PHP 7.2を使用していることですが、サイトで利用可能なデフォルトファイルには次のものがあります。
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
その行のバージョンを7.0ではなく7.2に更新すると、問題が修正されました。
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
/ etc/php/7.0/fpm/pool.d/www.confファイルを編集して、次の行を見つけます。
listen = 127.0.0.1:9000
そして、コメントアウトするか、次のものに置き換えます。
listen = /var/run/php7.0-fpm.sock
最初の質問に答える:
名前
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
存在しません。
2番目の質問については、Ansibleの問題とは思われませんが、上記を考慮してファイルの配置をトラブルシューティングする必要があります。
/etc/nginx/nginx.conf
ユーザーnginx;
Webサーバーがユーザーで動作する場合www-data書き込みが必要
ユーザーwww-data;
Sudo service php7.0-fpm status
OR
Sudo systemctl status php7.0-fpm
Sudo service php7.0-fpm restart
OR
Sudo systemctl reload php7.0-fpm
Sudo service php7.0-fpm start
OR
Sudo systemctl start php7.0-fpm