Сначала немного о том, как я установил PHP, Apache и некоторые модули 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
И мой файл httpd.conf выглядит так (т.е. я отключил .htaccess, а вместо этого сохранил все правила в httpd.conf):
<Directory /var/www/example.com/public>
AllowOverride None
[...]
</Directory>
Учитывая, что это даст вам общее представление о том, как настроен мой веб-сервер, я хотел бы продолжить и задать вопросы:
Верно ли, что Apache сравнительно медленно обслуживает статический контент с установленным PHP? (я думаю.)
Допустим, корневой каталог моего веб-сайта - '/var/www/example.com/public', а весь статический контент (CSS, JS, изображения) находится в '/var/www/example.com/public/uploads '; Как мне преодолеть Проблема (1) без необходимости перемещать весь статический контент на сервер, на котором не установлен PHP?
Только что узнал. Можно отключить обработку PHP в каталоге (и, следовательно, в его подкаталогах), добавив что-то вроде этого в свой файл 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>
Если вы используете файл .htaccess, поместите его в каталог статического содержимого (в моем случае '/var/www/example.com/public/uploads') со следующей записью:
# 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]
Кроме того, я только что понял, что если ваше приложение уже использует слой кеширования, что-то вроде Varnish, например Varnish перед Apache, обслуживающим кэшированные страницы и статический контент, вам не нужно ничего делать!
Это зависит от того, как вы настраиваете apache с помощью php, как вы оптимизируете свою конфигурацию. Если php настроен с интерфейсом CGI, тогда apache будет передавать только определенные типы файлов на php извне (так же, как, например, с nginx), поэтому влияние на другие файлы 0, в случае модуля это может быть быстрее с динамические страницы, потому что он не вызывает php извне, но может быть медленнее для других, потому что модуль php постоянно загружается с помощью apache, несмотря на то, что он все еще активен только для определенного типа файлов (в соответствии с mimetype).
Да нет
Используйте mod_fcgid с php
Пример php, настроенного как модуль, который анализирует только файлы .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