Die Verwendung von ProxyPassMatch für FastCGI führt zu einer Verbindungsverweigerung auf Port 9000

Die Verwendung von ProxyPassMatch für FastCGI führt zu einer Verbindungsverweigerung auf Port 9000

Ich bin nicht sicher, ob dies ein Konfigurationsproblem mit PHP, Apache oder Iptables ist, aber ich erhalte die folgende Fehlermeldung, wenn ich versuche, auf eine .phpDatei zuzugreifen. Bitte lassen Sie mich wissen, wenn Sie weitere Informationen zur Diagnose benötigen. Ich weiß nicht, was ich als Nächstes überprüfen soll. Vielen Dank.

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

ich folgtedieser Leitfadenund einem laufenden PHP 5.5.9 und Apache 2.4.7

Ich habe die mod_proxyund mod_proxy_soModule geladen:

# 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 

Hier ist die ProxyPassMatch-Direktive:

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

Ich habe auch versucht, UDS mit der folgenden Anweisung zu verwenden, aber der Apache-Konfigurationstest beschwert sich über eine absolute URL:

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

Hier istiptables -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

Antwort1

Überprüfen Sie, ob PHP-FPMes ausgeführt wird. Das Fehlerprotokoll besagt, dass apachekeine Verbindung zu 127.0.0.1:9000 hergestellt werden kann. Führen Sie es aus, und (vielleicht) wird der Fehler behoben.

Überprüfen Sie auch, ob PHP-FPMes über einen Socket ausgeführt wird. Möglicherweise läuft es, hört aber nicht im TCP/IP-Stack zu.

Antwort2

Gemäß Chris' Kommentar wollte ich nur hinzufügen, dass Sie, wenn Apache/PHP Socket-Verbindungen unterstützt (es sieht so aus, als ob Apache > 2.4.10 dies unterstützen kann), dies auch in Ihrer Apache-Konfiguration ändern können. Ich habe die Datei php vi /etc/php/7.0/fpm/pool.d/www.conf überprüft, um zu sehen, auf welchen Socket in der Listenzeile gewartet wird:

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

Dann habe ich das zu meiner Datei /etc/apache2/sites-enabled/000-default.conf hinzugefügt (oder zu der Website, auf der Sie es aktivieren möchten) …

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

Dann starte ich den Webserver neu und dann wird mir index.php angezeigt:

sudo service apache2 restart

verwandte Informationen