知识

nginx php windows

时间:2010-12-5 17:23:32  作者:焦点   来源:百科  查看:  评论:0
内容摘要: nginx php windows Windows上跑nginx加PHP,这事儿说难不难,说简单也够折腾一阵。我见过太多人在这一步卡住,不是php-cgi进程起不来,就是nginx配置里写错了路径。

nginx php windows

Windows上跑nginx加PHP,这事儿说难不难,说简单也够折腾一阵。我见过太多人在这一步卡住,不是php-cgi进程起不来,就是nginx配置里写错了路径。其实核心就一句话:nginx本身不执行PHP,它只是个传话的,你得找个能跑PHP的进程在后面候着。

先说说最坑的地方。很多人下载了PHP的zip包,解压完直接双击php.exe,黑窗口一闪就没了。这玩意儿不是这么用的。你得用php-cgi.exe,而且得带参数跑。我习惯这样启动:

D:\php\php-cgi.exe -b 127.0.0.1:9000 -c D:\php\php.ini

这条命令让php-cgi监听9000端口,nginx把PHP请求转发过去,它处理完再扔回来。注意php.ini的路径必须写对,否则你会遇到一堆诡异问题,比如某些扩展没加载,或者上传文件大小限制死活改不了。

但这里有个坑中之坑:这样手动启动的php-cgi进程,一旦崩了或者被你关了,nginx就直接报502。没有守护进程,没有自动重启。我见过有人用bat脚本循环检测,有人用任务计划程序定时重启,还有人干脆装了个Cygwin跑bash脚本。说实话,最省心的办法是装个RunHiddenConsole或者用WinSW把php-cgi注册成Windows服务,但那是后话了。

nginx的配置倒是直白。你需要在server块里加上这么一段:

location ~ \.php$ {  root D:/www; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }

注意那个SCRIPT_FILENAME,这行写错了,PHP就找不到文件。Windows路径用正斜杠,别用反斜杠,nginx在Windows下对反斜杠的处理非常让人崩溃。我当年第一次配的时候,把root写成了D:\www,结果所有PHP请求都返回404,折腾了一下午才发现是路径分隔符的问题。

还有个容易忽略的点:fastcgi_pass后面既可以写IP加端口,也可以写socket文件。Windows下没有Unix socket那套东西,老老实实用127.0.0.1:9000就行。别想着用//./pipe/php-cgi那种命名管道,配置起来麻烦,而且php-cgi对Windows管道的支持一直不太稳定。

性能方面,Windows上的nginx和PHP组合,应付开发环境绰绰有余。但要是真拿去做生产,我劝你三思。php-cgi在Windows下是单进程模式,没有进程管理,并发一高就歇菜。你可以用php-cgi.exe -n配合多个端口启动多个实例,再用nginx的upstream做负载均衡,但这样搞的复杂度,还不如直接装个Linux虚拟机来得痛快。

对了,还有个细节:PHP 7.4以上的版本,官方已经不提供Windows下的VC14编译版本了,你得注意下载对应Visual Studio版本的二进制包。否则php-cgi启动时直接报缺少VCRUNTIME140.dll,那画面真是让人血压飙升。

说点实际的。如果你只是想在Windows上快速搭个PHP环境跑跑代码,我建议你直接用Laragon或者XAMPP,它们把nginx、PHP、MySQL打包好了,点一下就能用。但如果你想搞明白原理,那就按上面说的手动折腾一遍。毕竟,自己搭过一遍环境的人,遇到问题才不会慌。

最后提醒一句:改完nginx配置记得nginx -s reload,别傻乎乎地关了再开。Windows下nginx没有优雅退出那一说,直接关进程有时候会留下残留的listen端口,下次启动就报错。你要是遇到bind() failed,八成就是端口没释放干净,去任务管理器里找nginx.exe,全杀了再起。

最近更新
热门排行
copyright © 2026 powered by 烟消火灭网   sitemap