安装 PHP 后,Apache 在提供静态内容方面(相对)较慢吗?

安装 PHP 后,Apache 在提供静态内容方面(相对)较慢吗?

首先介绍一下我如何安装 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>

考虑到它会让您对我的网络服务器的设置方式有一个基本的了解,我想继续问以下问题:

  1. 安装 PHP 后,Apache 在提供静态内容方面是否相对较慢?(我猜

  2. 假设我的网站的根目录是“/var/www/example.com/public”,并且我的所有静态内容(CSS,JS,图像)都在“/var/www/example.com/public/uploads”中;我该如何克服问题(1)而不需要将所有静态内容移动到没有安装 PHP 的服务器?

答案1

这取决于您如何配置 apache 和 php,以及如何优化配置。如果 php 配置了 CGI 接口,那么 apache 将只将某些类型的文件从外部传递给 php(例如,与 nginx 的方式相同),因此对其他文件没有任何影响,对于模块,动态页面可能会更快,因为它不是从外部调用 php,但对于其他页面可能会更慢,因为 php 模块始终由 apache 加载,尽管它仍然只对某些类型的文件有效(根据 mimetype)。

  1. 是/否

  2. 在 php 中使用 mod_fcgid

配置为模块的 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

答案2

刚刚发现。通过在 httpd.conf 文件中添加类似以下内容,可以禁用目录(及其子目录)中的 PHP 处理:

<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 的东西,例如,在 Apache 前面的 Varnish 提供缓存页面和静态内容,您不需要做任何事情!

相关内容