Com o PHP instalado, o Apache é (comparativamente) lento na entrega de conteúdo estático?

2

Primeiro, algumas informações sobre como eu instalei o PHP, o Apache e alguns módulos do Apache:

# apt-get -y install php5 php-pear libapache2-mod-php5 php-apc php5-mysql php5-mcrypt php5-xmlrpc php5-curl php5-imagick php5-gd php5-imap php5-pspell

# apt-get -y install apache2 apache2-doc apache2-utils

# a2enmod setenvif headers deflate filter expires rewrite include

E meu arquivo httpd.conf se parece com isso (ou seja, eu essencialmente desabilitei o .htaccess e tenha todas as regras no httpd.conf):

<Directory /var/www/example.com/public>

  AllowOverride None

  [...]

</Directory>

Considerando que ele oferece uma ideia básica de como meu servidor da Web está configurado, gostaria de fazer as perguntas:

  1. É verdade que o Apache é relativamente lento para servir conteúdo estático com o PHP instalado? ( Eu acho .)

  2. Digamos que o diretório raiz do meu site seja '/var/www/example.com/public' e eu tenha todo o conteúdo estático (CSS, JS, imagens) em '/ var / www / example .com / public / uploads '; Como faço para superar Problema (1) sem ter que mover todo o conteúdo estático para um servidor que não tenha o PHP instalado?

por its_me 17.09.2013 / 19:09

2 respostas

2

Depende de como você configura o apache com php, como você otimiza sua configuração. Se o php estiver configurado com a interface CGI, então o apache passará externamente apenas certos tipos de arquivos para o php (da mesma forma como feito com o nginx por exemplo), então há 0 impacto em outros arquivos, no caso de módulo pode ser mais rápido com páginas dinâmicas, porque ele não está chamando php externamente, mas pode ser mais lento para os outros porque o módulo php é carregado com o apache o tempo todo, apesar de ainda estar ativo apenas para certos tipos de arquivos (de acordo com o tipo MIME).

  1. Sim / Não

  2. Use mod_fcgid com php

Exemplo de php configurado como módulo, que analisa apenas arquivos .php (RHEL5 / 6, Fedora):

[root@main ~]# cat /etc/httpd/conf.d/php.conf
#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>


#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php

#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
AddType application/x-httpd-php-source .phps
    
por 17.09.2013 / 19:26
2

Acabei de descobrir. É possível desabilitar o processamento do PHP em um diretório (e, portanto, em seus subdiretórios), adicionando algo assim em seu arquivo httpd.conf:

<Directory "/var/www/example.com/public/uploads">
  # Turn PHP parsing off
  php_flag engine off

  # Make .htaccess ineffective in the said directory
  AllowOverride None

  # Make index.php ineffective
  DirectoryIndex Off

  # (Optional) Show content of PHP files in browser (as if it were a text file)
  AddType text/plain .php .php3 .php4 .php5 .php6 .phtml

  RewriteEngine On

  # Return '403 Forbidden' for PHP files
  RewriteRule \.php$ - [F,L]
</Directory>

Se estiver usando o arquivo .htaccess, coloque um em seu diretório de conteúdo estático (no meu caso '/var/www/example.com/public/uploads') com a seguinte entrada:

# Turn PHP parsing off
php_flag engine off

# Make index.php ineffective
DirectoryIndex Off

# (Optional) Show content of PHP files in browser (as if it were a text file)
AddType text/plain .php .php3 .php4 .php5 .php6 .phtml

RewriteEngine On

# Return '403 Forbidden' for PHP files
RewriteRule \.php$ - [F,L]

Além disso, acabei de perceber que, se seu aplicativo já usa uma camada de cache, algo como Varnish, por exemplo, Varnish na frente do Apache, servindo páginas em cache e conteúdo estático, você não precisa fazer nada!

    
por 17.09.2013 / 19:37