web-dev-qa-db-ja.com

FastCGIにProxyPassMatchを使用すると、ポート9000で接続が拒否される

これがphp、Apache、またはiptablesの設定の問題かどうかはわかりませんが、.phpファイルにアクセスしようとすると、次のエラーが表示されます。診断に役立つ情報がさらに必要な場合はお知らせください。次に確認する内容がわかりません。ありがとうございました。

error.log

[Thu May 08 16:43:15.392784 2014] [proxy:error] [pid 23112] (111)Connection refused: AH00957: FCGI: attempt to connect to 127.0.0.1:9000 (*) failed
[Thu May 08 16:43:15.392891 2014] [proxy_fcgi:error] [pid 23112] [client 74.164.254.206:52788] AH01079: failed to make connection to backend: 127.0.0.1

私は このガイド を実行し、PHP 5.5.9およびApache 2.4.7を実行しています。

mod_proxyおよびmod_proxy_soモジュールをロードしました。

# grep LoadModule /etc/Apache2/Apache2.conf
LoadModule proxy_module /usr/lib/Apache2/modules/mod_proxy.so
LoadModule proxy_fcgi_module /usr/lib/Apache2/modules/mod_proxy_fcgi.so 

ProxyPassMatchディレクティブは次のとおりです。

ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/$1

また、次のディレクティブを使用してUDSを使用しようとしましたが、Apache configテストは絶対URLについて不平を言っています。

ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/var/run/php5-fpm.sock|fcgi://127.0.0.1:80/path/to/root/

こちらがiptables -Lです

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
REJECT     all  --  anywhere             127.0.0.0/8          reject-with icmp-port-   unreachable
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:finger
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:smtp
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:urd
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:pop3
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:pop3s
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imap2
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imaps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:submission
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:webmin
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
ACCEPT     icmp --  anywhere             anywhere
LOG        all  --  anywhere             anywhere             limit: avg 5/min burst 5   LOG level debug prefix "iptables denied: "
DROP       all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
3
Chris Rockwell

PHP-FPM が走っています。エラーログには、Apacheが127.0.0.1:9000に接続できないことが示されています。実行するとエラーが発生する可能性があります。

また、PHP-FPMソケット経由で実行。多分それは動作していますが、TCP/IPスタックでリッスンしていません。

3
masegaloeh

Chrisのコメントによれば、Apache/phpがソケット接続をサポートする場合(Apache> 2.4.10の場合、サポートできるように見えます)、Apache構成でそれを使用するように変更することもできます。 php vi /etc/php/7.0/fpm/pool.d/www.confファイルをチェックして、listen行でどのソケットがリッスンしているかを確認しました。

listen = /run/php/php7.0-fpm.sock

次に、それを私の/etc/Apache2/sites-enabled/000-default.confファイル(または、有効にするWebサイト)に追加します...

<FilesMatch \.php$>
    # 2.4.10+ can proxy to unix socket
    # SetHandler "proxy:unix:/var/run/php?-fpm.sock|fcgi://localhost/"

    # Else we can just use a tcp socket:
    # SetHandler "proxy:fcgi://127.0.0.1:9000"

    SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost/"
</FilesMatch>

次にWebサーバーを再起動すると、index.phpが表示されます。

Sudo service Apache2 restart
2