项目

通用

个人资料

操作

在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一样。

(待补充)

您可能对阅读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。

请阅读配置部分以获取更多背景信息

按目录配置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文件。

另请参阅

外部链接

gstrauss更新于2年多前 · 91个修订版本