首先介绍一下我如何安装 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>
考虑到它会让您对我的网络服务器的设置方式有一个基本的了解,我想继续问以下问题:
安装 PHP 后,Apache 在提供静态内容方面是否相对较慢?(我猜。
假设我的网站的根目录是“/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)。
是/否
在 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 提供缓存页面和静态内容,您不需要做任何事情!