在Lighttpd上设置PHP¶
简介¶
Lighttpd通过CGI和FastCGI支持PHP。
性能¶
在我们所有的测试中,它都显示出比Apache 1.3.x + mod_php4更好的性能。请参阅https://lighttpd.ac.cn/benchmark/查看结果。
它支持操作码缓存器吗?¶
例如APC、TurckMM、XCache等
是的!即使它们的文档说它们在CGI中不起作用。在lighttpd下,PHP通常以FastCGI模式运行,该模式支持这些操作码缓存器,就像Apache中的mod_php4一样。
- http://pecl.php.net/apc
- http://eaccelerator.net/ (Turck mmCache的继承者)
- XCache, XCache FAQ (新的,经过良好测试,与FastCGI一起运行)
(待补充)
您可能对阅读eAccelerator开放讨论论坛中的支持FASTCGI模式吗?帖子感兴趣。
安装¶
Windows¶
CGI模式下的PHP¶
建议使用DevelWin32来构建您自己的原生_WIN32 lighttpd。
或者,安装过时、第三方、未经维护、不推荐的Windows版Lighttpd。然后您需要编辑C:\lighttpd\etc\lighttpd.conf,取消注释"mod_cgi"行并添加以下行
cgi.assign = ( ".php" => "c:/php/php-cgi.exe" )
请注意,在上面的代码片段中,PHP-CGI的路径中不能有任何空格。保存lighttpd.conf并重启lighttpd。打开您的浏览器并访问http://localhost/,您应该会看到一个欢迎页面。您可以将PHP文件放在C:\lighttpd\htdocs中——要测试PHP,只需创建一个名为index.php的文件,将其保存在Lighttpd根目录(C:\lighttpd\htdocs)中,并将以下内容粘贴到此文件中
<?php phpinfo(); ?>
访问http://localhost/,您应该会看到一个列出所有PHP变量和信息的页面。
请注意,FastCGI目前在Windows上无法工作。祝您好运!
更新:DevelWin32 _WIN32原型支持FastCGI。
FastCGI模式下的PHP¶
建议使用DevelWin32来构建您自己的原生_WIN32 lighttpd。
或者,从http://lighttpd.dtech.hu/下载过时、第三方、未经维护、不推荐的Windows版Lighttpd。
从http://windows.php.net/download/下载最新的Windows版PHP(VC9,非线程安全)。
解压分发包,您将得到一个类似于这样的目录结构
c:\LightTPD c:\PHP (be sure to rename php.ini-production to php.ini)
打开c:\LightTPD\lighttpd.conf并取消注释"mod_fastcgi"行。
端口警告:许多指南建议将PHP设置为端口9000。XDebug扩展默认使用端口9000。
在lighttpd.conf的第150行左右(您可以搜索"fastcgi module"),取消注释以下行并修改它们以匹配以下内容
#### fastcgi module ## read fastcgi.txt for more info ## for PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini ## ... and PHP_FCGI_MAX_REQUESTS = 0 environment variable in system properties fastcgi.server = ( ".php" => ( "localhost" => ( "host" => "127.0.0.1", "port" => 9123 ) ) ) ## map multiple extensions to the same fastcgi server fastcgi.map-extensions = ( ".php3" => ".php", ".php4" => ".php", ".php5" => ".php", ".phps" => ".php", ".phtml" => ".php" )
主机和端口指向fastcgi守护进程(在本例中为PHP-CGI)将监听的IP地址和端口。
Windows版本中还有一个bug,需要在lighttpd.conf中进行另一次编辑。在第50行左右,更改以下行
#### include important configuration files ## include path variables include "variables.conf" ## include mimetype mapping file include "mimetype.conf" ## include virtual hosts (optional) #include "vhosts.conf"
为
#### include important configuration files ## include path variables include "c:/lighttpd/conf/variables.conf" ## include mimetype mapping file include "c:/lighttpd/conf/mimetype.conf" ## include virtual hosts (optional) #include "c:/lighttpd/conf/vhosts.conf"
接下来从php目录启动php-cgi守护进程
c:\php\php-cgi.exe -b 127.0.0.1:9123
然后(重新)启动LightTPD Web服务器。
cd c:\lighttpd && lighttpd.exe -f conf\lighttpd.conf -m modules
您可以将PHP文件放在C:\lighttpd\htdocs中。Windows版Lighttpd在此文件夹中有一个index.php用于测试。
访问http://localhost/,您应该会得到一个列出所有PHP变量和信息的页面。
如果不行,您可能需要显式设置docroot。
测试配置后,在继续操作之前,您应该使用以下命令停止PHP和Lighttpd
taskkill /f /IM lighttpd.exe && taskkill /f /IM php-cgi.exe
使用批处理文件启动PHP-FastCGI和Lighttpd¶
如果一切正常,您可以编写一个批处理文件,同时启动/停止服务器和PHP守护进程。请注意,您的路径中应该有RunHiddenConsole.exe,并且这些文件应该放在c:\LightTPD中
Start-LightTPD.bat
@ECHO OFF ECHO Starting PHP FastCGI... cd c:\php set PHP_FCGI_MAX_REQUESTS=0 RunHiddenConsole.exe c:\PHP\php-cgi.exe -b 127.0.0.1:9123 ECHO Starting LightTPD... ECHO. cd c:\lighttpd lighttpd.exe -v ECHO. lighttpd.exe -f conf\lighttpd.conf -m modules EXIT
Stop-LightTPD.bat
@ECHO OFF ECHO Stopping LightTPD... taskkill /f /IM lighttpd.exe ECHO Stopping PHP FastCGI... taskkill /f /IM php-cgi.exe ECHO. EXIT
将PHP-FastCGI和Lighttpd作为服务运行¶
首先需要的是WinSW二进制文件,可从http://maven.jenkins-ci.org/content/repositories/releases/com/sun/winsw/winsw/获取
“winsw-{VERSION}-bin.exe”需要保存到包含php-cgi.exe的文件夹(通常是c:\php),并且需要重命名为“pwinsw.exe”。
然后,pwinsw.exe需要复制到Lighttpd文件夹(通常是c:\lighttpd),并重命名为lwinsw.exe(字母L,而不是I)。
在PHP文件夹中,创建一个名为“pwinsw.xml”的XML文件,内容如下
<service> <id>PHP</id> <name>PHP</name> <description>PHP</description> <executable>C:\php\php-cgi.exe</executable> <stopexecutable>C:\php\php-stop.cmd</stopexecutable> <env name="PHPRC" value="c:\php" /> <env name="PHP_FCGI_MAX_REQUESTS" value="0" /> <logpath>C:\lighttpd\logs</logpath> <logmode>roll</logmode> <startargument>-b 127.0.0.1:9123</startargument> <startargument>-cc:\php\php.ini</startargument> </service>
在PHP文件夹中,还要创建一个名为“php-stop.cmd”的批处理文件,内容如下
taskkill /f /IM php-cgi.exe
在Lighttpd文件夹中,创建一个名为“lwinsw.xml”(字母L,不是字母I)的XML文件,内容如下
<service> <id>Lighttpd</id> <name>Lighttpd</name> <description>Lighttpd</description> <executable>C:\lighttpd\lighttpd.exe</executable> <stopexecutable>C:\lighttpd\lighttpd-stop.cmd</stopexecutable> <logpath>C:\lighttpd\logs</logpath> <logmode>roll</logmode> <startargument>-fc:/lighttpd/conf/lighttpd.conf</startargument> <startargument>-mc:/lighttpd/modules</startargument> <startargument>-D</startargument> </service>
在Lighttpd文件夹中,还要创建一个名为“lighttpd-stop.cmd”的批处理文件,内容如下
taskkill /f /IM lighttpd.exe
打开命令提示符并运行以下命令
c:\lighttpd\lwinsw.exe install && c:\php\pwinsw.exe install && net start Lighttpd && net start PHP
如果存在名为“Lighttpd”或“PHP”的任何服务,或者如果winsw.exe的两个副本都命名为“winsw.exe”而不是“lwinsw.exe”和“pwinsw.exe”,则此步骤将失败。
至此,Lighttpd和PHP服务应该已安装完成。
Start Lighttpd: net start lighttpd Stop Lighttpd: net stop lighttpd Check Lighttpd status: c:\lighttpd\lwinsw.exe status Start PHP: net start PHP Stop PHP: net stop PHP Check PHP status: c:\PHP\pwinsw.exe status
您现在可以访问http://localhost/,您应该会看到PHP信息页面。
Unix系统¶
'''起点:'''Lighttpd已经[wiki:TutorialInstallation安装并正常工作]
首先,您需要一个支持FastCGI的PHP。根据您的发行版,您可能已经拥有它。
您可能已经有了该分发版
Arch Linux¶
阅读https://wiki.archlinux.org.cn/index.php/Fastcgi_and_lighttpd
FreeBSD¶
#!ShellExample $ cd /usr/ports/lang/php5 # make install clean
请务必在配置屏幕中勾选“Build FPM version”选项。如果您没有看到配置屏幕,则说明您正在使用旧版本的ports tree,或者需要执行“make config”。如果您使用的是PHP 4或PHP 5的早期版本,则可能需要使用www/php4-cgi或类似的port,而不是新的主port。
PC-BSD¶
下载自执行安装向导,双击文件,并按照安装向导的说明进行操作。您的主目录下将有一个“www”目录用于放置网页。您可以选择在系统启动时自动启动lighttpd,并支持一个或多个用户。完成后,只需在您喜欢的浏览器中打开http://localhost/,您应该会看到欢迎屏幕。
Gentoo¶
确保USE标志'cgi'已启用。
#!ShellExample $ emerge -av dev-lang/php
如果没有,请将USE标志添加到您的/etc/make.conf或直接添加到dev-lang/php ebuild中。
#!ShellExample # echo dev-lang/php cgi >> /etc/portage/package.use
XCache也已包含在官方树中(截至2007-02-03),因此emerge dev-php5/xcache应该也能直接使用。
Debian / Ubuntu¶
Debian/Ubuntu提供了一个启用了fastcgi的版本。
#!ShellExample # apt-get install php4-cgi
如果您正在使用php5-cgi,您只需在您的配置中更改您的“bin-path”(Debian默认使用/usr/bin/php4-cgi)。
pkgsrc (NetBSD, DragonFlyBSD及其他系统)¶
添加
PKG_OPTIONS.php = fastcgi
到您的mk.conf。PHP可以在www/php4和lang/php5中找到。fastcgi二进制文件位于/usr/pkg/libexec/cgi-bin/php
其他¶
从https://php.ac.cn/下载源代码tarball,并至少使用以下设置进行配置
#!ShellExample $ ./configure \ --enable-fastcgi \ --enable-discard-path \ --enable-force-cgi-redirect
如果您想使用与在mod_php配置中使用的相同的PHP,请调用
#!php <?php phpinfo(); ?>
- 从脚本输出中复制配置选项
- 删除
`
--with-apxs@`和
`--with-apxs2
`@选项 - 添加上面列出的三个选项。
现在通过调用`@make
`和
`make install
`@来构建PHP,并查看是否能找到一个响应的php二进制文件
#!ShellExample $ php -v PHP 5.0.3 (cgi-fcgi) (built: Dec 21 2004 12:59:18) Copyright (c) 1997-2004 The PHP Group Zend Engine v2.0.3, Copyright (c) 1998-2004 Zend Technologies with eAccelerator v0.9.3, Copyright (c) 2004-2005 eAccelerator, by eAccelerator
或类似的内容。其中`
(cgi-fcgi)`
是重要的部分。该二进制文件也可能被称为`@php-cgi
`@。
所以执行类似php-cgi -v的命令来查看(cgi-fcgi)横幅。
#!ShellExample $ php-cgi -v PHP 4.4.2 (cgi-fcgi) (built: Jul 21 2006 15:45:58) Copyright (c) 1997-2006 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
如果您仍然找不到它,请遵循此提示
#!ShellExample $ ls sapi/cgi/php*
配置¶
添加此行
cgi.fix_pathinfo = 1
到您的php.ini中,并确保mod_fastcgi在您的lighttpd.conf中已加载
server.modules = ( "mod_fastcgi", )
然后将此基本部分添加到同一文件中
fastcgi.server = ( ".php" => (( "bin-path" => "/path/to/php-cgi", "socket" => "/tmp/php.socket" )))
更高级一点的设置是此项,它尝试调整更多选项。如果您需要PATH_INFO,broken-scriptfilename是为您准备的。
可供您使用。
fastcgi.server = ( ".php" => (( "bin-path" => "/path/to/php-cgi", "socket" => "/tmp/php.socket", "max-procs" => 2, "bin-environment" => ( "PHP_FCGI_CHILDREN" => "16", "PHP_FCGI_MAX_REQUESTS" => "10000" ), "bin-copy-environment" => ( "PATH", "SHELL", "USER" ), "broken-scriptfilename" => "enable" )))
如果您正在使用任何PHP操作码缓存器,将'''“max-procs”'''设置为1很重要,除非您清楚自己在做什么。如果您希望有更多子进程处理请求,请增加PHP_FCGI_CHILDREN。
请阅读配置部分以获取更多背景信息- 文档:配置
- 文档:ModFastCGI
并使用
将http://trac.lighttpd.net/trac/browser/tags/lighttpd-1.4.11/doc/lighttpd.conf作为配置的起点。
按目录配置PHP¶
如果您习惯于使用Apache .htaccess文件为每个目录设置PHP选项,请参阅HowToPhpHtaccess
''当使用CGI版本的PHP(普通的CGI或FastCGI)时,Apache无法传递其解析的.htaccess文件中的任何PHP设置。这可以通过为每个用户提供自己的php.ini文件来解决,但我不喜欢这种解决方案。此扩展会解析这些配置文件(大多数情况下是.htaccess)并更改设置。它将从文档根目录开始,搜索所有目录以查找配置文件,直到找到请求脚本所在的目录。为了最大限度地减少性能影响,还实现了缓存。''
它解析来自 .htaccess 文件的任何 PHP 设置。这可以通过给予
每个用户自己的 php.ini 文件来解决,但我并不喜欢那个解决方案。
此扩展解析这些配置文件(在大多数情况下是 .htaccess)并
更改设置。它将搜索所有目录以查找配置文件
从文档根目录(docroot)直到找到请求脚本的目录。一个缓存
的实现是为了最大限度地减少性能影响。''
htscanner(Windows DLL可在pecl4win.php.net获取)
当您从mod_php迁移到fast-cgi时,可以使用htscanner扩展来解决此问题。您可以在此处找到该扩展:http://pecl.php.net/htscanner(Windows DLL可在此处获取:http://pecl4win.php.net)
有关更多信息,请参阅README文件。
另请参阅¶
- 如何设置具有独立权限的fastcgi和php
- 如何在FreeBSD中设置PHP和Lighty
- 在FreeBSD中方便地外部生成FastCGI PHP进程
- 使用PHP控制远程链接
- X-LIGHTTPD-send-file(或X-Sendfile):查看它在大文件下载方面能为您做什么