Apache 2.0 em sistemas Unix

Esta seção contém notas e dicas específicas para a instalação do PHP em Apache 2.x em sistemas Unix.

Aviso

Não recomendados utilizar o threaded MPM em produção com o Apache 2. Utilize o prefork MPM, que é MPM padrão no Apache 2.0 e 2.2. Para mais informações veja o FAQ relacionado sobre o uso de Apache2 com threaded MPM

A » documentação do Apache é a fonte mais importante sobre o servidor Apache 2.x. Mais informações sobre opções de instalação podem ser encontradas lá.

A versão mais recente do servidor Apache HTTP pode ser obtida do » site de download Apache, e uma versão correspondente do PHP pode ser obtida dos locais mencionados anteriormente. Esse guia rápido cobre apenas o básico para iniciar o Apache 2.x e PHP. Para mais informações leia a » documentação do Apache. Os números de versão estão omitidos aqui, para garantir que as instruções não fiquem desatualizadas. Nos exemplos abaixo 'NN' deve ser substituído com as versão específica do Apache utilizado.

Atualmente há duas versões do Apache 2.x. - 2.0 e 2.2. Embora haja razões para escolher entre elas, 2.2 é a versão mais atual, e aquela recomendada, se essa opção lhe for possível. Entretanto as instruções aqui funcionarão para ambas as versões 2.0 e 2.2.

  1. Obter o Apache HTTP do endereço acima e descompactar:

    gzip -d httpd-2_x_NN.tar.gz
    tar -xf httpd-2_x_NN.tar
    
  2. Da mesma forma, obter e descompactar os fontes do PHP:

    gunzip php-NN.tar.gz
    tar -xf php-NN.tar
    
  3. Compilar e instalar o Apache. Consulte a documentação de instalação do Apache para mais detalhes/opções de compilação.

    cd httpd-2_x_NN
    ./configure --enable-so
    make
    make install
    
  4. Você agora tem um Apache 2.x.NN disponível em /usr/local/apache2, configurado com módulos carregáveis e o MPM prefork padrão. Para testar a instalação utilize o procedimento de inicialização do servidor Apache. Por exemplo:

    /usr/local/apache2/bin/apachectl start
    
    e depois pare o servidor para configurar o PHP:
    /usr/local/apache2/bin/apachectl stop
    

  5. Agora configure e compile o PHP. Aqui você pode personalizar o PHP com várias opções, por exemplo quais extensões estarão disponíveis. Rode ./configure --help para uma lista de opções disponíveis. Em nosso exemplo nós iremos configurar apenas com suporte ao Apache 2 e MySQL.

    Se você compilou o Apache a partir dos fontes como descrito acima os exemplos abaixo terão caminhos coincidentes do apxs, mas se instalou de outra forma você terá de ajustar o caminho para o apxs. Algumas distribuições renomeiam apxs para apxs2.

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

    Se decidir modificar suas configurações depois da instalação você terá de rodar novamente o configure, make e make install. Terá também de reiniciar o Apache para que o novo módulo seja carregado. Uma recompilação do Apache não é necessária.

    Note que por padrão 'make install' também instalará o PEAR, várias ferramentas do PHP como phpize, instalar o PHP CLI, entre outros.

  6. Configure seu php.ini:

    cp php.ini-development /usr/local/lib/php.ini
    

    Você pode editar seu arquivo .ini para configurar o PHP. Se preferir ter um php.ini em outra localização, utilize --with-config-file-path=/some/path no passo 5.

    Se preferir utilizar o php.ini-production leia atentamente esse arquivo, dado que ele modifica o comportamento do PHP.

  7. Edite seu httpd.conf para carregar o módulo do PHP. O caminho a direita da instrução LoadModule precisa apontar para o caminho do módulo do PHP em seu sistema. O 'make install' acima pode ter feito isso por você, mas é bom confirmar.

    No PHP 7:

    LoadModule php7_module modules/libphp7.so

    No PHP 5:

    LoadModule php5_module modules/libphp5.so
  8. Configure o Apache para interpretar certas extensões de arquivos do PHP. Por exemplo configurar o Apache para interpretar aquivos .php. Em vez de utilizar apenas a diretiva Apache AddType é recomendado evitar uploads potencialmente perigosos e nomes de arquivos como exploit.php.jpg de serem executados pelo PHP. Nesse exemplo você pode ter qualquer extensão (ou extensões) configuradas. Adicionaremos .php como demonstração.

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

    Ou, pode-se acrescentar também .php, .php2, .php3, .php4, .php5, .php6 e .phtml para ser executado como PHP, desta forma:

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

    Para permitir que arquivos .phps sejam interpretados pelo filtro de fontes do PHP e exibidos como código fonte destacado, utilize isso:

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

    mod_rewrite pode ser utilizado para permitir que qualquer arquivo .php seja exibido como código fonte destacado, sem ter de renomear ou copiar aquivos para a extensão .phps, assim:

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

    O filtro de fontes PHP não deve ser ativado em ambiente de produção, onde ele pode expor dados confidenciais ou de outra forma importantes, que estejam incluídos no código fonte.

  9. Depois utilize a forma normal de iniciar o servidor Apache:

    /usr/local/apache2/bin/apachectl start
    

    ou

    service httpd restart
    

Seguindo os passos acima você terá um Apache2 rodando com suporte ao PHP como um módulo SAPI. Existem muitas outras opções de configuração disponíveis no Apache e PHP. Para mais informações rode ./configure --help na código fonte correspondente.

Apache pode ser construído com multithread através da seleção do MPM worker, em vez do padrão MPM prefork. Isso é possível acrescentado-se o seguinte argumento no ./configure do passo 3 acima:

--with-mpm=worker

Isso não deve ser feito sem conhecer as consequências dessa decisão, ou pelo menos ter uma boa noção de suas implicações. A documentação do Apache sobre » MPM-Modules discute essas questões em grandes detalhes.

Nota:

A Apache MultiViews FAQ discute multiviews com o PHP.

Nota:

Para construir uma versão multithread o sistema destino precisa suportar threads. Nesse caso o PHP também deve ser compilado com o (experimental) Zend Thread Safety (ZTS). Nessa configuração nem todas as extensões estarão disponíveis. A configuração recomendada é construir o Apache com o módulo MPM prefork padrão.