Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between FastCgiExternalServer and FastCgiServer in Apache FastCGI PHP?

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?

like image 665
tonix Avatar asked May 06 '16 22:05

tonix


People also ask

What is the difference between mod_PHP and PHP-FPM?

Unlike PHP-FPM, mod_PHP locks out processes and disrupts the performance of a website. If your primary goal for hosting your web application with an optimized cloud service is to achieve optimal performance and security, then PHP-FPM is the way forward.

What is CGI and FPM?

Running PHP as a CGI means that you basically tell your web server the location of the PHP executable file, and the server runs that executable. whereas. PHP FastCGI Process Manager (PHP-FPM) is an alternative FastCGI daemon for PHP that allows a website to handle strenuous loads.

What is libapache2 mod Fcgid?

This package contains mod_fcgid, a high-performance alternative to mod_cgi or mod_cgid. It starts a sufficient number of instances of the CGI program to handle concurrent requests. These programs remain running to handle further incoming requests. It is a binary-compatible alternative to Apache module mod_fastcgi.

What is Proxy_fcgi?

“mod_proxy_fcgi” is an Apache v2. 0 proxy sheme module that implement “fcgi:” scheme to handle reverse proxy protocole FastCGI. It complete rewrite of the old mod_fastcgi module developt by OpenMarket, based on FastCGI and CGI specification.


Video Answer


2 Answers

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.

like image 122
covener Avatar answered Sep 30 '22 15:09

covener


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

like image 31
Atul Jindal Avatar answered Sep 30 '22 16:09

Atul Jindal