Difference between FastCgiExternalServer and FastCgiServer in Apache FastCGI PHP?

大憨熊 提交于 2019-12-10 02:56:20

问题


Just let me state that I am new to FastCGI. I have MAMP's Apache on my OS X machine. Default PHP handler was Apache Handler 2.0 (libphp5.so). I wanted to change to FastCGI and followed the answer here: How to configure Apache to run PHP as FastCGI on Ubuntu 12.04 via terminal?

I added the following at the end of my 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>

However, as you can see, FastCgiExternalServer is commented out. Instead, I had to use FastCgiServer cause otherwise Apache was giving me the following errors when trying to request a page:

[Fri May 06 23:25:22 2016] [error] [client ::1] (2)No such file or directory: FastCGI: failed to connect to server "/Applications/MAMP/fcgi-bin/php5.fcgi": connect() failed

[Fri May 06 23:25:22 2016] [error] [client ::1] FastCGI: incomplete headers (0 bytes) received from server "/Applications/MAMP/fcgi-bin/php5.fcgi"

But /Applications/MAMP/fcgi-bin/php5.fcgi exists and its content is:

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

What's the difference between FastCgiServer and FastCgiExternalServer and why FastCgiExternalServer didn't work in my case but FastCgiServer worked?


回答1:


FastCgiServer is a server that mod_fastcgi will do process management for -- spinning instances up and down and giving them a unix domain socket to listen on. No outside action is required to start the fastcgi server.

FastCgiExternalServer is a server that mod_fastcgi will NOT do any process management for -- it will just reach out to the unix or TCP socket you tell it to use and forward requests/responses to it. You, or some daemon outside of httpd, must be starting something to listen on the listed socket. The most basic way is the 'fcgistarter' utility, other options are things like php-fpm.




回答2:


If performance is reason, I would say use Apache with fcgid. This is considered better for performance. To deal with performance, mod_fcgid starts multiple instances of CGI programs to handle concurrent requests. This is alternate to mod_php for PHP developers, giving higher performance. This article I found is great resource to learn

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



来源:https://stackoverflow.com/questions/37082036/difference-between-fastcgiexternalserver-and-fastcgiserver-in-apache-fastcgi-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!