FASTCGI가 PHP 스크립트를 실행하는 데 사용되는지 확인하는 방법

StackOverflow https://stackoverflow.com/questions/609044

  •  03-07-2019
  •  | 
  •  

문제

호스팅 된 사이트가 있으며 Joomla를 구성하는 데 어려움이 있습니다 (IIS7 + Win Server 2008에서 Joomla + PHP + MySQL 실행). 로컬 컴퓨터에서 비슷한 구성을 실행하고 있습니다 (IIS7 + Vista X64의 Joomla + PHP + MySQL).이를 설정하는 방법에 대한 다양한 튜토리얼에서 명령을 따를 수있었습니다.

호스팅 된 사이트 의이 증상은 Joomla에서 SEO 설정을 켤 수 없다는 것입니다 (첫 번째 설정 인 "검색 엔진 친화적 URL"). 404 (파일을 찾을 수 없음)를 얻거나 URL이 올바르게 다시 작성되었지만 항상 표시되는 홈 페이지의 콘텐츠입니다. 나는 내 홈 머신에 비슷한 문제가 있었고 PHP를 호스트하기 위해 FastCGI를 사용하지 않았기 때문에 그랬기 때문에 호스팅 된 사이트에서이를 조사하기로 결정했습니다.

어쨌든, 나는 호스팅 된 사이트에서 Joomla를 호스팅하는 디렉토리의 web.config 파일에서 다음 줄을 발견했습니다.

<add name="Plesk_Handler_3522909676" path="*.php" verb="*" modules="IsapiModule" scriptProcessor="c:\program files (x86)\parallels\plesk\additional\pleskphp5\php5isapi.dll" resourceType="Either" />

과거의 경험에서, 나는 PHP가 FastCGI에서 실행되지 않을 때 몇 가지 문제가 있다는 것을 알고 있습니다. 루트 폴더의 web.config가 다음 줄을 대신 사용하는 것을 발견했습니다.

<add name="Plesk_Handler_0286090609" path="*.php" verb="*" modules="CgiModule" scriptProcessor="c:\program files (x86)\parallels\plesk\additional\pleskphp5\php-cgi.exe" resourceType="Either" /> 

나는 그것을 Joomla 디렉토리의 Web.config에서 복사하고 다른 행동을 얻었지만 여전히 작동하지 않습니다. phpinfo ()를 실행하는 Joomla 디렉토리에 .php 파일을로드하면 서버 API에서 CGI/FASTCGI라고 표시됩니다. 그게 다 긍정적 인 확인 그 Fastcgi가 사용되고 있습니까? 웹 구성의 핸들러가 모듈을 모듈로 가리키는 이유 = "fastcgimodule"대신 "cgimodule"을 가리 킵니다.

호스팅 사이트이므로 ApplicationHost.config 파일에 액세스 할 수 없다는 것을 아는 한 ...

도움이 되었습니까?

해결책

간단한 테스트는 다음과 같습니다.

  1. phpinfo.php 파일을 만듭니다

 <?php phpinfo(); ?> 

내부에;

  1. 요구 http://yoursite.com/phpinfo.php/foobar?foo=bar

  2. phpinfo의 출력을 확인하고 _server [ "request_uri"]를 찾으십시오.

이 변수가 누락되면 CGI가 사용됩니다. 변수가 존재하고 올바르게 /phpinfo.php/foobar?foo=bar로 설정되면 Isapi 또는 FastCGI가 사용됩니다. 서버 API의 출력 상단 근처에서 살펴보십시오. ISAPI (ISAPI가 사용되고 있음을 의미 함) 또는 CGI/FASTCGI (이미 CGI를 배제했기 때문에 FastCGI가 사용되고 있음을 의미 함)로 설정해야합니다.

다른 팁

(Centos)를 사용할 수 있습니다.

apacectl -m :

file_cache_module (shared) mem_cache_module (공유) version_module (공유) FASTCGI_MODULE (공유)

불행히도 확인 \_SERVER["REQUEST_URI"] 나를 위해 일하지 않았습니다. 사용 CGI 또는 Fastcgi, 그것은 항상 표시됩니다 /phpinfo.php/foobar?foo=bar.

어느 쪽도 보지 못했습니다 Server API = CGI/FastCGI 설정되었습니다 - 컴파일 된 PHP 지원 버전의 인터페이스가 사용되는 것이 아니라 어떤 인터페이스를 알려줍니다. 그러나 더 안정적으로 작동 할 수있는 또 다른 방법을 찾았습니다.

Plonk 파일을 제자리에 호출했습니다 phpinfo.php 텍스트 포함 : <? php phpinfo(); ?>

변수를 확인하십시오 \_ENV["REDIRECT_HANDLER"]:
그것이 설정된 경우 php5-fastcgi (또는 다른 FastCgi-ish) 요청은 아마도 대부분을 통과했을 것입니다. Fastcgi. 그것이 설정된 경우 application/x-httpd-php (또는 위의 것 이외의 것을 가정합니다), 당신은 사용 중입니다. CGI.

그러나 확실한 방법은 약간의 테스트를 실행하는 것입니다. 당신은 필요합니다 ab 이를위한 (아파치 벤치) 도구.
CGI 유무에 관계없이 다른 컴퓨터에서 실행하십시오.

ab -c 100 -n 1000 http://yourdomain.com/path/phpinfo.php

라인을 확인하십시오 Time taken for tests:. 내 상자에 적어도 1.3Mbps ADSL 연결을 통해 VPS에 액세스 한 후 FastCGI는 완전히 최대화되었으며 CGI는 절반 만 채울 수있었습니다.

도움이 되었기를 바랍니다.

php_sapi_name () 또는 php_sapi, 둘 다 작동합니다.

http://php.net/manual/en/function.php-sapi-name.php

<?php
    if (php_sapi_name() != 'cgi-fcgi'){
        echo 'I knew fastcgi wasn\'t working.';
    }else{
        echo 'Holy crap, something worked for once.';
    }

Joomla는 검색 엔진 친화적 인 URL을 활성화하기 위해 다시 작성 규칙이있는 .htaccess 파일을 만듭니다. Apache를 사용하는 경우 Joomla 설치가 포함 된 디렉토리에 "allowoverride fileInfo"를 설정해야합니다. IIS를 사용하는 경우 iismodrewrite와 같은 모듈이 필요합니다. 다음은 다음과 같은 지침입니다. [http://www.micronovae.com/modrewrite/articles/sefjoomla.html

당신은 그것을 참조하는 것을 볼 수 있습니다

<?php
phpinfo();
?>

서버 API = CGI/FASTCGI

FastCGI가 실행되지 않을 때 스크립트가 완전히 실패한 위치에 처음으로 물건을 설정해야합니다. 그렇다면 그것이 효과가있을 때 Fastcgi 데몬이 그 이유라는 것을 알게 될 것입니다.

이것은 나를 위해 효과가있었습니다.

/**
 * return phpinfo() results as an array
 *
 * @credit http://php.net/manual/en/function.phpinfo.php#106862
 * @param void
 * @return array
 */
function phpinfo_array(){
    ob_start();
    phpinfo();
    $info_arr = array();
    $info_lines = explode("\n", strip_tags(ob_get_clean(), '<tr><td><h2>'));
    $cat = 'general';
    foreach($info_lines as $line){
        preg_match('/<h2>(.*)<\/h2>/', $line, $title) ? $cat = preg_replace('/\s+/', '_', strtolower(trim($title[1]))) : null;
        if(preg_match('/<tr><td[^>]+>([^<]*)<\/td><td[^>]+>([^<]*)<\/td><\/tr>/', $line, $val)){
            $subcat = preg_replace('/\s+/', '_', strtolower(trim($val[1])));
            $info_arr[$cat][$subcat] = $val[2];
        } elseif(preg_match('/<tr><td[^>]+>([^<]*)<\/td><td[^>]+>([^<]*)<\/td><td[^>]+>([^<]*)<\/td><\/tr>/', $line, $val)){
            $subcat = preg_replace('/\s+/', '_', strtolower(trim($val[1])));
            $info_arr[$cat][$subcat] = array('local' => $val[2], 'master' => $val[3]);
        }
    }
    return $info_arr;
}


// output proper response code
$phpinfo = phpinfo_array();
$configure = (@isset($phpinfo['general']['configure_command'])) ?: null;

// properly account for FastCGI
if ($configure && preg_match('/--enable-fastcgi/', $configure)){
    // fastcgi response
    header('Status: 403 Access is forbidden');
} else {
    // http response
    header('HTTP/1.0 403 Access is forbidden');
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top