Unix 시스템의 Apache 2.x

이 섹션에는 Unix 시스템에 PHP의 Apache 2.x 설치와 관련된 참고 사항과 힌트가 포함되어 있습니다.

경고 Apache 2와 함께 프로덕션 환경에서는 스레드 MPM을 사용하지 않는 것이 좋습니다. Apache 2.0 및 2.2에서 기본 MPM인 prefork MPM을 사용합니다. 이유에 대한 정보는 스레드 MPM과 함께 Apache2 사용에 대한 관련 FAQ 항목을 참조하십시오.

» Apache 설명서는 Apache 2.x 서버에 대한 가장 권위 있는 정보 소스입니다. Apache 설치 옵션에 대한 자세한 정보는 여기에서 찾을 수 있습니다.

Apache HTTP Server의 최신 버전은 » Apache 다운로드 사이트에서, 적합한 PHP 버전은 위에서 언급한 위치에서 얻을 수 있습니다. 이 빠른 가이드는 Apache 2.x 및 PHP를 시작하기 위한 기본 사항만 다룹니다. 자세한 내용은 » Apache 설명서를 참조하세요. 지침이 올바르지 않은지 확인하기 위해 버전 번호는 여기에서 생략되었습니다. 아래 예에서 'NN'은 사용 중인 Apache의 특정 버전으로 대체되어야 합니다.

현재 Apache 2.x의 두 가지 버전이 있습니다. 2.4와 2.2가 있습니다. 각각을 선택하는 데는 여러 가지 이유가 있지만 2.4가 현재 최신 버전이며 해당 옵션을 사용할 수 있는 경우 권장되는 버전입니다. 그러나 여기의 지침은 2.4 또는 2.2에서 작동합니다. Apache httpd 2.2는 공식적으로 단종되었으며 이에 대한 새로운 개발이나 패치는 발행되지 않습니다.

  1. 위에 나열된 위치에서 Apache HTTP 서버를 얻고 압축을 풉니다.
    tar -xzf httpd-2.x.NN.tar.gz
  2. 마찬가지로 PHP 소스를 얻고 압축을 풉니다.
    tar -xzf php-NN.tar.gz
  3. 아파치를 빌드하고 설치합니다. Apache 빌드에 대한 자세한 내용은 Apache 설치 설명서를 참조하십시오.
    cd httpd-2_x_NN
    ./configure --enable-so
    make
    make install
                        
  4. 이제 /usr/local/apache2에서 Apache 2.x.NN을 사용할 수 있으며 로드 가능한 모듈 지원과 표준 MPM 프리포크로 구성됩니다. 설치를 테스트하려면 Apache 서버를 시작하는 일반적인 절차를 사용하십시오. 예:
    /usr/local/apache2/bin/apachectl start

    PHP에 대한 구성을 계속하려면 서버를 중지하십시오.

    /usr/local/apache2/bin/apachectl stop
  5. 이제 PHP를 구성하고 빌드합니다. 여기에서 활성화할 확장과 같은 다양한 옵션으로 PHP를 사용자 정의할 수 있습니다. 사용 가능한 옵션 목록을 보려면 ./configure --help를 실행하십시오. 이 예에서는 Apache 2 및 MySQL 지원으로 간단한 구성을 수행합니다.

    위에서 설명한 대로 소스에서 Apache를 빌드한 경우 아래 예제는 apxs에 대한 경로와 일치하지만 Apache를 다른 방법으로 설치한 경우 그에 따라 apxs에 대한 경로를 조정해야 합니다. 일부 배포판은 apxs의 이름을 apxs2로 변경할 수 있습니다.

    cd ../php-NN
    ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
    make
    make install
                        

    설치 후 구성 옵션을 변경하기로 결정했다면 구성, 작성 및 설치 단계를 다시 실행해야 합니다. 새 모듈을 적용하려면 아파치를 다시 시작하기만 하면 됩니다. Apache의 재컴파일은 필요하지 않습니다.

    달리 명시되지 않는 한 'make install'은 PEAR, phpize와 같은 다양한 PHP 도구, PHP CLI 설치 등도 설치합니다.

  6. php.ini 설정
    cp php.ini-development /usr/local/lib/php.ini

    .ini 파일을 편집하여 PHP 옵션을 설정할 수 있습니다. php.ini를 다른 위치에 두려면 5단계에서 --with-config-file-path=/some/path를 사용하십시오.

    대신 php.ini-production을 선택하는 경우 변경 사항 목록을 반드시 읽어야 합니다. 변경 사항은 PHP 작동 방식에 영향을 미치기 때문입니다.

  7. PHP 모듈을 로드하려면 httpd.conf를 편집하십시오. LoadModule 문의 오른쪽에 있는 경로는 시스템의 PHP 모듈 경로를 가리켜야 합니다. 위의 make install이 이미 이것을 추가했을 수도 있지만 반드시 확인하십시오.

    PHP 8의 경우:

    LoadModule php_module modules/libphp.so

    PHP 7의 경우:

    LoadModule php7_module modules/libphp7.so
  8. 특정 확장을 PHP로 구문 분석하도록 Apache에 지시하십시오. 예를 들어 Apache가 .php 파일을 PHP로 구문 분석하도록 합시다. Apache AddType 지시문만 사용하는 대신, 잠재적으로 위험한 업로드 및 exploit.php.jpg와 같은 생성 파일이 PHP로 실행되는 것을 방지하고자 합니다. 이 예제를 사용하면 간단히 추가하여 모든 확장을 PHP로 구문 분석할 수 있습니다. 시연을 위해 .php를 추가하겠습니다.
    <FilesMatch \.php$>
        SetHandler application/x-httpd-php
    </FilesMatch>
                        

    또는 .php, .php2, .php3, .php4, .php5, .php6 및 .phtml 파일을 PHP로 실행하되 다른 것은 허용하지 않으려면 다음을 사용합니다.

    <FilesMatch "\.ph(p[2-6]?|tml)$">
        SetHandler application/x-httpd-php
    </FilesMatch>
                        

    그리고 .phps 파일이 PHP 소스 필터에 의해 처리되고 구문 강조 소스 코드로 표시되도록 하려면 다음을 사용하십시오.

    <FilesMatch "\.phps$">
        SetHandler application/x-httpd-php-source
    </FilesMatch>
                        

    mod_rewrite를 사용할 수 있습니다. 임의의 .php 파일을 .phps 파일로 이름을 바꾸거나 복사하지 않고도 구문 강조 소스 코드로 표시할 수 있습니다.

    RewriteEngine On
    RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]
                        

    PHP 소스 필터는 소스 코드에 포함된 기밀 정보 또는 민감한 정보를 노출할 수 있는 프로덕션 시스템에서 활성화하면 안 됩니다.

  9. Apache 서버를 시작하는 일반적인 절차를 사용하십시오. 예:
    /usr/local/apache2/bin/apachectl start

    또는

    service httpd restart

    위의 단계를 따르면 PHP를 SAPI 모듈로 지원하는 Apache2 웹 서버가 실행됩니다. 물론 Apache와 PHP를 사용할 수 있는 더 많은 구성 옵션이 있습니다. 자세한 내용을 보려면 해당 소스 트리에서 ./configure --help를 입력하십시오.

    Apache가 구축될 때 표준 prefork MPM이 아닌 작업자 MPM을 선택하여 Apache를 다중 스레드로 구축할 수 있습니다. 위의 3단계에서 ./configure에 전달된 인수에 다음 옵션을 추가하면 됩니다.

    --with-mpm=worker

    이것은 이 결정의 결과를 인식하지 못하고 적어도 의미에 대한 공정한 이해 없이 수행되어서는 안 됩니다. » MPM 모듈에 관한 Apache 문서는 MPM에 대해 훨씬 더 자세히 설명합니다.

    메모: Apache MultiViews FAQ에서는 PHP에서 multiview를 사용하는 방법에 대해 설명합니다.

    메모: 다중 스레드 버전의 Apache를 빌드하려면 대상 시스템이 스레드를 지원해야 합니다. 이 경우 PHP도 실험적인 ZTS(Zend Thread Safety)로 빌드해야 합니다. 이 구성에서는 모든 확장을 사용할 수 없습니다. 권장 설정은 기본 prefork MPM 모듈로 Apache를 빌드하는 것입니다.