2016-05-06 70 views
8

只是讓我說我​​是FastCGI的新手。我在我的OS X機器上安裝了MAMP的Apache。默認的PHP處理程序是Apache Handler 2.0(libphp5.so)。我想改變到FastCGI這裏遵循的答案:How to configure Apache to run PHP as FastCGI on Ubuntu 12.04 via terminal?Apache FastCGI PHP中的FastCgiExternalServer和FastCgiServer之間的區別?

我說在我的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> 

然而,正如你所看到的,FastCgiExternalServer被註釋掉了。相反,我不得不使用FastCgiServer原因,否則阿帕奇試圖請求一個頁面時,是給我以下錯誤:

[週五05月06日23時25分22秒2016年] [錯誤] [客戶:: 1]( 2)沒有這樣的文件或目錄:FastCGI:無法連接到服務器「/Applications/MAMP/fcgi-bin/php5.fcgi」:連接()失敗

[Fri May 06 23:25:22 2016] []錯誤] [客戶端:: 1] FastCGI的:不完全的報頭(0字節)從服務器 「/Applications/MAMP/fcgi-bin/php5.fcgi」

但是/Applications/MAMP/fcgi-bin/php5.fcgi存在並且其內容接收是:

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

什麼FastCgiServerFastCgiExternalServer,爲什麼FastCgiExternalServer沒有我的情況,但FastCgiServer工作的工作有什麼區別?

+0

如果你在2016年做PHP的FastCGI,看mod_proxy_fcgi和PHP-FPM代替的mod_fastcgi。 – covener

回答

8

FastCgiServer是一個服務器,mod_fastcgi將執行進程管理 - 上下旋轉實例併爲其提供unix域套接字來偵聽。啓動fastcgi服務器不需要外部操作。

FastCgiExternalServer是一個服務器,mod_fastcgi不會進行任何進程管理 - 它只會與您告訴它使用的unix或TCP套接字聯繫,並將請求/響應轉發給它。您或者httpd之外的守護進程必須開始在列出的套接字上進行偵聽。最基本的方法是'fcgistarter'工具,其他選項是像php-fpm。

1

如果性能是原因,我會說使用Apache與fcgid。這被認爲對性能更好。 爲了處理性能,mod_fcgid啓動CGI程序的多個實例來處理併發請求。對於PHP開發人員來說,這是mod_php的替代方案,可以提供更高的性能。本文中,我發現是很好的資源,學習

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

+0

爲了獲得更好的性能,請使用nginx而不是apache(請參閱google:nginx apache性能)。 –

+0

@KamilKiełczewski推測Nginx的性能優勢並非全面準確。對於靜態內容,是的,但不是動態內容,它們大致相同。來自Google搜索的一個示例頁面:http://www.hostingadvice。com/how-to/nginx-vs-apache/ – jeffmcneill

+0

@jeffmcneill但是,未來的Web方向是靜態的客戶端(例如在Angular2上構建)用於生成動態頁面內容(客戶端是靜態純JS + HTML + CSS文件並啓動所有動態在瀏覽器端加載這個靜態文件並運行JS),並且該客戶端僅通過RESTfull請求(json,ajax)與後端交流 - 所以靜態性能非常重要:)所以在MVC模型中,M在後端,並且VC處於打開狀態前端:) –