Nginx und PHP-cgi kann nicht file_get_contents jede website auf dem server
Dieser ist am besten erklärt durch den code, denke ich. Aus dem web-Verzeichnis:
vi get.php
Fügen Sie diesen php get.php
<?
echo file_get_contents("http://IPOFTHESERVER/");
?>
IPOFTHESERVER ist die IP von dem server, nginx und PHP laufen.
php get.php
Liefert den Inhalt der (Standard -) website gehostet auf, dass I. P. ABER
..gibt eine 504 Gateway Time-out. Es ist das gleiche mit curl. Es ist das gleiche mit dem PHP Befehl exec und zu ERHALTEN. Aber von der Kommandozeile aus direkt hat alles Prima funktioniert.
Ich habe repliziert auf 2 nginx-Server. Aus irgendeinem Grund nginx wird nicht lassen Sie mich stellen Sie eine HTTP-Verbindung zum server läuft über PHP (es sei denn, es ist über die Kommandozeile).
Jemand irgendwelche Ideen, warum?
Dank!
- Haben Sie die php.ini und stellen Sie sicher, dass die
allow_url_fopen
Einstellung aktiviert ist? - haben Sie versucht, mit der loopback-Adresse "127.0.0.1" ? wenn das funktioniert, ich denke, es ist ein fehlender Eintrag in der /etc/hosts
- allow_url_fopen ist ON.
- Habe es gerade ausprobiert. Genau die gleiche Geschichte. Nicht sicher, es hat etwas zu tun mit /etc/hosts. GET 127.0.0.1 funktioniert einwandfrei. Es ist nur beim ausführen über PHP gibt es ein problem.
- Durch IPOFTHESERVER, du meinst die externe IP richtig? Das wichtigste, was ich denken kann, ist die nginx-Konfiguration kann nicht eingestellt werden, hören Sie auf die IP-Adresse, sondern eine domain. Können Sie pastebin oder poste deine nginx-Konfiguration-Datei für den vhost (oder nginx.conf wenn kein vhost)? Das könnte uns helfen, es herauszufinden.
- Vielen Dank für Ihren Kommentar. Es hat mich zum nachdenken auf die richtige Spur. Ich musste mich ändern PHP_FCGI_CHILDREN 2 in der /etc/init.d/php-cgi-Datei. Im Grunde, mit nur 1 Kind die gleichen Arbeiter konnte nicht senden/empfangen von Daten zur gleichen Zeit. Prost!
- Gern behilflich sein 😛
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen Sie, dass Ihr nicht in Betrieb Arbeiter Erschöpfung auf der PHP-Seite der Dinge, das war das Problem auf meinem lab server-setup konfiguriert wurde den RAM zu schonen.
Grundsätzlich habe ich vergessen, dass Ihr mit einem einzelnen Arbeitnehmers zum Prozess der Hauptseite angezeigt wird, um die end-user, dann die get_file_contents () - Funktion ist im Grunde erzeugen Sie eine separate HTTP-Anforderung an den web-server, effektiv für 2 Arbeitnehmer für eine einzelne Seite zu laden.
Als die erste Seite war mit dem letzten Arbeiter war niemand verfügbar, für das get_file_contents Funktion, daher Nginx schließlich antwortete mit einem 504 auf der ersten Seite, da gab es keine Antwort auf die reverse-proxy-Anforderung.
pm.max_children = 1
config, die ist äquivalent zu PHP_FCGI_CHILDREN in der PHP-FPM Website-config-Datei.Prüfen, ob allow_url_fopen auf true gesetzt ist in der php.ini.