2016-05-06 13 views
8

Lasciatemi dire che sono nuovo di FastCGI. Ho Apache di MAMP sulla mia macchina OS X. Il gestore PHP predefinito era Apache Handler 2.0 (libphp5.so). Volevo cambiare per FastCGI e seguii la risposta qui: How to configure Apache to run PHP as FastCGI on Ubuntu 12.04 via terminal?Differenza tra FastCgiExternalServer e FastCgiServer in Apache FastCGI PHP?

ho aggiunto quanto segue alla fine del mio httpd.conf:

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

Tuttavia, come si può vedere, FastCgiExternalServer sia commentata. Invece, ho dovuto usare FastCgiServer causa altrimenti Apache mi stava dando i seguenti errori quando si cerca di richiedere una pagina:

[ven 6 mag 23:25:22 2016] [errore] [client :: 1] (2) Nessun file o directory di questo tipo: FastCGI: impossibile connettersi al server "/Applications/MAMP/fcgi-bin/php5.fcgi": connect() non riuscito

[Ven May 06 23:25:22 2016] [ errore] [client :: 1] FastCGI: intestazioni incompleti (0 byte) ricevuta dal server "/Applications/MAMP/fcgi-bin/php5.fcgi"

Ma /Applications/MAMP/fcgi-bin/php5.fcgi esiste e il suo contenuto è:

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

Qual è la differenza tra FastCgiServer e FastCgiExternalServer e perché FastCgiExternalServer non ha funzionato nel mio caso, ma FastCgiServer funzionato?

+0

Se stai facendo PHP FastCGI nel 2016, guarda mod_proxy_fcgi e php-fpm invece di mod_fastcgi. – covener

risposta

8

FastCgiServer è un server che mod_fastcgi eseguirà la gestione dei processi per - girare le istanze su e giù e assegnare loro un socket dominio unix per l'ascolto. Non è richiesta alcuna azione esterna per avviare il server fastcgi.

FastCgiExternalServer è un server che mod_fastcgi NON eseguirà alcuna gestione dei processi per - raggiungerà solo il socket unix o TCP che gli dirai di utilizzare e inoltrare richieste/risposte ad esso. Tu, o qualche demone al di fuori di httpd, devi avviare qualcosa da ascoltare sul socket elencato. Il modo più semplice è l'utilità 'fcgistarter', altre opzioni sono cose come php-fpm.

1

Se le prestazioni sono ragionevoli, direi di usare Apache con fcgid. Questo è considerato migliore per le prestazioni. Per gestire le prestazioni, mod_fcgid avvia più istanze di programmi CGI per gestire richieste simultanee. Questo è alternativo a mod_php per gli sviluppatori PHP, offrendo prestazioni più elevate. In questo articolo ho trovato è grande risorsa per imparare

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

+0

Per avere prestazioni migliori usa nginx invece di apache (guarda google: prestazioni di nginx apache). –

+0

@ KamilKiełczewski presume che il vantaggio prestazionale di Nginx non sia accurato su tutta la linea. Per contenuto statico, sì, ma non contenuto dinamico, dove sono approssimativamente equivalenti. Una pagina di esempio da googling: http: //www.hostingadvice.com/how-to/nginx-vs-apache/ – jeffmcneill

+0

@jeffmcneill Ma la direzione web futura è statica Client (ad esempio build su Angular2) per generare contenuto di pagina dinamico (il client è puro JS + HTML e CSS CSS e tutte le dinamiche iniziano dal lato del browser dopo caricare questi file statici ed eseguire JS) e quel client comunica con il backend solo dalle richieste RESTfull (json, ajax) - quindi le prestazioni statiche sono molto importanti :) Quindi nel modello MVC la M è sul backend e VC è attivo frontend :) –