2016-05-06 11 views
8

Lassen Sie mich nur feststellen, dass ich neu bei FastCGI bin. Ich habe MAMPs Apache auf meinem OS X-Rechner. Der Standard-PHP-Handler war Apache Handler 2.0 (libphp5.so). Ich wollte hier FastCGI und folgte die Antwort ändern:Unterschied zwischen FastCgiExternalServer und FastCgiServer in Apache FastCGI PHP?

<IfModule mod_fastcgi.c> 
    AddHandler php5.fcgi .php 
    Action php5.fcgi /php5.fcgi 
    Alias /php5.fcgi /Applications/MAMP/fcgi-bin/php5.fcgi 
    FastCgiServer /Applications/MAMP/fcgi-bin/php5.fcgi -socket /Applications/MAMP/tmp/php-fcgi/php5-fpm.sock -pass-header Authorization -idle-timeout 3600 
    #FastCgiExternalServer /Applications/MAMP/fcgi-bin/php5.fcgi -socket /Applications/MAMP/tmp/php-fcgi/php5-fpm.sock -pass-header Authorization -idle-timeout 3600 
    <Directory /Applications/MAMP/fcgi-bin> 
     Order allow,deny 
     Allow from all 
    </Directory> 
</IfModule> 

Doch wie Sie sehen können, FastCgiExternalServer Kommentar gesetzt ist: How to configure Apache to run PHP as FastCGI on Ubuntu 12.04 via terminal?

ich folgendes am Ende meiner httpd.conf hinzugefügt. Stattdessen hatte ich FastCgiServer Ursache sonst Apache gab mir die folgenden Fehler zu verwenden, wenn eine Seite anzufordern versuchen:

[Fr Mai 06 23.25.22 2016] [Fehler] [client :: 1] (2) Keine solche Datei oder Verzeichnis: FastCGI: Verbindung zum Server fehlgeschlagen "/Applications/MAMP/fcgi-bin/php5.fcgi": connect() fehlgeschlagen

[Fr May 06 23:25:22 2016] [ Fehler] [client :: 1] FastCGI: unvollständige Header (0 Bytes) vom Server empfangen "/Applications/MAMP/fcgi-bin/php5.fcgi"

Aber /Applications/MAMP/fcgi-bin/php5.fcgi existiert und dessen Inhalt ist:

#!/bin/bash 
PHP_CGI=/Applications/MAMP/bin/php/php5.6.2/bin/php-cgi 
exec $PHP_CGI 

Was ist der Unterschied zwischen FastCgiServer und FastCgiExternalServer und warum FastCgiExternalServer nicht funktionierte in meinem Fall aber FastCgiServer funktionierte?

+0

zu lernen Wenn Sie PHP FastCGI im Jahr 2016 tun, schauen mod_proxy_fcgi und php-fpm statt mod_fastcgi. – covener

Antwort

8

FastCgiServer ist ein Server, auf dem mod_fastcgi die Prozessverwaltung für - das Up- und Down-Driving von Instanzen durchführt und ihnen einen Unix-Domain-Socket zum Anhören gibt. Zum Starten des fastcgi-Servers ist keine externe Aktion erforderlich.

FastCgiExternalServer ist ein Server, für den mod_fastcgi keine Prozessverwaltung übernimmt - er greift nur auf den Unix- oder TCP-Socket zu, den Sie ihm zur Verwendung und Weiterleitung von Anfragen/Antworten mitteilen. Sie oder ein anderer Daemon außerhalb von httpd müssen etwas starten, um den angegebenen Socket abhören zu können. Der einfachste Weg ist das Dienstprogramm "fcgistarter", andere Optionen sind Dinge wie php-fpm.

1

Wenn Leistung Grund ist, würde ich Apache mit fcgid verwenden. Dies wird für die Leistung als besser angesehen. Um mit der Leistung umzugehen, startet mod_fcgid mehrere Instanzen von CGI-Programmen, um gleichzeitige Anforderungen zu behandeln. Dies ist eine Alternative zu mod_php für PHP-Entwickler, die eine höhere Leistung bietet. Dieser Artikel, den ich gefunden ist große Ressource

http://2bits.com/articles/apache-fcgid-acceptable-performance-and-better-resource-utilization.html

+0

Um eine bessere Leistung zu erzielen, benutze nginx anstelle von Apache (siehe google: nginx apache performance). –

+0

@ KamilKiełczewski vermutet Nginx Leistungsvorteil ist nicht auf der ganzen Linie korrekt. Für statischen Inhalt, ja, aber nicht für dynamischen Inhalt, wo sie ungefähr gleichwertig sind. Eine Beispielseite aus Google: http: //www.hostingadvice.com/how-to/nginx-vs-apache/ – jeffmcneill

+0

@jeffmcneill Aber zukünftige Web-Richtung ist statische Client (zum Beispiel auf Angular2) für die Generierung dynamischer Seiteninhalt (Client ist statische reine JS + HTML + CSS-Dateien und alle Dynamik beginnt auf der Seite des Browsers nach dem Laden dieser statischen Dateien und JS laufen) und dieser Client mit backend nur durch RESTfull Anfragen (json, ajax) kommunizieren - so statische Leistung ist sehr wichtig :) So im MVC-Modell ist das M Backend, und VC ist eingeschaltet Frontend :) –