![Apache 2.4 + PHP-FPM + Unix ソケットを使用した ProxyPassMatch](https://rvso.com/image/726377/Apache%202.4%20%2B%20PHP-FPM%20%2B%20Unix%20%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%20ProxyPassMatch.png)
Unix ソケットを使用して Apache v2.4 + PHP-FPM + ProxyPassMatch をセットアップしてみます。
Debian 9 Stretch、PHP v5.6.37、PHP v7.0.31、Apache v2.4.25 を使用しています。
私の仮想ホストの設定は次のとおりです (000-default.conf):
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName local.lc
DocumentRoot /var/www
ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5.6-fpm.sock|fcgi://localhost/var/www/"
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
次のコマンドを実行しました:
sudo apt-get install php7.0-cli php7.0-fpm php-pear libapache2-mod-fcgid
sudo apt install software-properties-common
# add repo to get PHP5
sudo apt-get -y install apt-transport-https lsb-release ca-certificates
sudo curl https://packages.sury.org/php/apt.gpg | apt-key add -
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sudo echo 'deb https://packages.sury.org/php/ stretch main' > /etc/apt/sources.list.d/deb.sury.org.list
sudo apt-get update
sudo apt-get install php5.6-cli php5.6-fpm
sudo apt-get install php7.0 php7.0-fpm
sudo a2enconf php5.6-fpm
sudo systemctl reload apache2
sudo a2dismod php5 php7 php5.6 php7.0 mpm_prefork
sudo a2enmod actions alias proxy_fcgi mpm_worker
sudo systemctl restart apache2 php5.6-fpm php7.0-fpm
変更後、サーバーは以下を使用して再起動されます。
sudo systemctl restart apache2 php5.6-fpm php7.0-fpm
読み込むと空のページが表示されます
http://local.lc/
私の Windows ベースの開発用コンピュータ上の Web サイト。local.lc は「hosts」ファイルにあります。
ログ (/var/log/apache2/error.log) には次の内容が表示されます。
[Tue Aug 28 23:24:26.685004 2018] [mpm_worker:notice] [pid 43104:tid 140487559849152] AH00295: caught SIGTERM, shutting down
[Tue Aug 28 23:24:27.001054 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity for Apache/2.9.1 (http://www.modsecurity.org/) configured.
[Tue Aug 28 23:24:27.001189 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity: APR compiled version="1.5.2"; loaded version="1.5.2"
[Tue Aug 28 23:24:27.001205 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity: PCRE compiled version="8.39 "; loaded version="8.39 2016-06-14"
[Tue Aug 28 23:24:27.001223 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity: LUA compiled version="Lua 5.1"
[Tue Aug 28 23:24:27.001236 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity: YAJL compiled version="2.1.0"
[Tue Aug 28 23:24:27.001248 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity: LIBXML compiled version="2.9.4"
[Tue Aug 28 23:24:27.001498 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity: StatusEngine call: "2.9.1,Apache/2.4.25 (Debian),1.5.2/1.5.2,8.39/8.39 2016-06-14,Lua 5.1,2.9.4,cb"
[Tue Aug 28 23:24:27.135554 2018] [:notice] [pid 43531:tid 139833116394688] ModSecurity: StatusEngine call successfully sent. For more information visit: http://status.modsecurity.org/
[Tue Aug 28 23:24:28.005175 2018] [mpm_worker:notice] [pid 43532:tid 139833116394688] AH00292: Apache/2.4.25 (Debian) OpenSSL/1.0.2l mod_fcgid/2.3.9 configured -- resuming normal operations
[Tue Aug 28 23:24:28.005270 2018] [core:notice] [pid 43532:tid 139833116394688] AH00094: Command line: '/usr/sbin/apache2'
ログには役立つ情報が何も見当たりません。
何が問題なのか分かりますか?
デフォルトのページが読み込まれないのはなぜですか?
答え1
DirectoryIndex
設定にディレクティブが欠けているので、次のようなURLをリクエストするとローカルApache は、ディスク上でどのファイルを探して提供するかがわからないため、ディレクトリの内容だけを表示します (これはおそらく、ユーザーが望む結果ではありません)。
PHP-FPM を使用している場合は、 PHP-FPM によって処理されるようDirectoryIndex
な設定を行うと予想されます。index.php
ユーティリティなどを使用して PHP-FPM を直接テストすると、cgi-fcgi
それでも動作しない場合は Apache をバイパスできます。
答え2
アクセスしてもhttp://local.lc/index.html
ページは表示されず、error.log にもエラーは記録されませんでした。
@bodgit が提案したディレクティブを使用してこれを修正しDirectoryIndex
、ロードするhttp://local.lc/index.php
と error.log にエラーが発生するようになりました。
error.log を見ると、次のエラー メッセージが表示されました。
No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /var/run/php5.6-fpm.sock (localhost) failed".
パスを確認しまし/var/run/php5.6-fpm.sock
たが見つかりませんでしたが、が/var/run/php/php5.6-fpm.sock
見つかりました。
仮想ホスト設定ではパスは次のように固定されていました (000-default.conf):
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName local.lc
DocumentRoot /var/www
ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/var/www/"
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
したがって、vhost 構成ファイル内のパスを修正し、
http://local.lc/index.php
ページをロードすると、次のように表示されます。
"それは動作します!"。
問題は解決しました!