
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 .php
Datei 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_proxy
und mod_proxy_so
Module 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-FPM
es ausgeführt wird. Das Fehlerprotokoll besagt, dass apache
keine 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-FPM
es ü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