2012-09-07 14 views
0

그래서 나는 다음과 같은 일하고 가상 호스트를 가지고 : 나는이 필요 왜 알아낼 질수 무엇apache + fastcgi + fpm suexec이 필요한 이유는 무엇입니까?

<VirtualHost 192.168.128.20:80> 
     ServerName euclid.domain.tld 

     #LogLevel debug 
     ErrorLog /var/www/euclid/logs/error_log 

     SuexecUserGroup fastcgi www_euclid 
     FastCgiExternalServer /var/www/euclid/htdocs/cgi-bin -socket /var/run/php-fpm/euclid.sock -user fastcgi -group www_euclid 
     AddHandler php-fastcgi .php 
     Action php-fastcgi /cgi-bin 
     Alias /cgi-bin /var/www/euclid/htdocs/cgi-bin 

     <Location /cgi-bin> 
       Order Deny,Allow 
       Deny from All 
       # Prevent accessing this path directly 
       Allow from env=REDIRECT_STATUS 

       Options +ExecCGI +FollowSymLInks +SymLinksIfOwnerMatch 
     </Location> 

     DocumentRoot /var/www/euclid/htdocs 
     <Directory /var/www/euclid/htdocs> 
       AllowOverride all 
       Order allow,deny 
       Allow from all 
     </Directory> 
</VirtualHost> 

가 하나/모두 SuexecUserGroup FastCGI를 www_euclid과 -user FastCGI를 -group www_euclid 플래그 FastCgiExternalServer. FPM은 풀링을 사용하며 각 풀은 자체 사용자/그룹에서 실행됩니다. 이 문제는 올바르게 작동합니다. SuexecUserGroup 및/또는 -user fastcgi -group www_euclid 인수를 제거하면 다음 오류가 발생하며 그 이유는 알 수 없습니다. 또한 uid와 gid가 fastcgi에 의해 소켓 파일에 액세스하는 데 사용되는 이유는 무엇입니까? 그것 fastcgi 확실히 아닙니다 : ww_euclid.

(13)Permission denied: FastCGI: failed to connect to server 
"/var/www/euclid/htdocs/cgi-bin": connect() failed FastCGI: 
incomplete headers (0 bytes) received from server 
"/var/www/euclid/htdocs/cgi-bin" 

답변

1

오케이 저는 문제가 무엇인지 알아 냈다고 생각합니다. 간단한 대답은 다음과 같습니다. mod_fastcgi는 짜증나. 그것의 오래된, unmaintained 및 가난하게 문서화 된. php-fpm을 실행하는 방법을 찾을 때 계속 올라간 이유는 저 밖에 있습니다. 너의 각자 두통을 제외하고 다만 그것을 사용하지 말라!

실제 솔루션

오히려 간단하다

<VirtualHost 192.168.128.20:80> 
     ServerName euclid.domain.tld 

     #LogLevel debug 
     ErrorLog /var/www/euclid/logs/error_log 

     <IfDefine PROXY> 
       #If you want to use mod_proxy (Probably the best option) 
       ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://localhost:9000/var/www/euclid/htdocs/$1 
     </IfDefine> 

     <IfDefine FASTCGI_HANDLER> 
       #If you want to use mod_fastcgi_handler (3rd party) 
       AddHandler fcgi:/var/run/php-fpm-euclid.sock .php 
     </IfDefine> 


     DocumentRoot /var/www/euclid/htdocs 
     <Directory /var/www/euclid/htdocs> 
       AllowOverride all 
       Order allow,deny 
       Allow from all 
     </Directory> 
</VirtualHost> 
1

SELinux를 사용하여 우연히 당신이 있었습니까? 아파치가 장고의 fastcgi 소켓에 연결하지 못하게하는 SELinux 보안 정책 때문에 생긴 비슷한 문제가 발생했습니다. 실행중인 setenforce Permissive가 작동했습니다.