nginxcgiphp
‘壹’ 用nginx作为负载均衡服务器,php代码放在哪
lnmp架构 直接放nginx的web文件夹中,通过cgi解析php返回给nginx,如果是lnmpa架构,就是多了个apache,nginx负责分发请求,然后apache调用php_mod解析php,最后返回给nginx
如果是负载均衡,nginx分发请求,每个请求可能请求不同的服务器,但是每个服务器的网站程序应该是一致的,并且每个服务器上都部署了php环境和程序,然后返回给请求者nginx输出页面。
‘贰’ 如何架设Nginx+Php Web服务器
1、首先需要准备的应用程序包。nginx:nginx/Windows-1.0.4php:php-5.2.16-nts-Win32-VC6-x86.zip(nginx下php是以FastCGI的方式运行,所以我们下载非线程安全也就是nts的php包)(还会用到)RunHiddenConsole:RunHiddenConsole.zip2、安装与配置。1)php的安装与配置。直接解压下载好的php包,到D盘wnmp目录(D:\wnmp),这里把解压出来的文件夹重命名成php5。进入文件夹修改php.ini-recommended文件为php.ini,并用Editplus或者Notepad++打开来。找到extension_dir="./ext"更改为extension_dir="D:/wnmp/php5/ext"往下看,再找到;extension=php_mysql.dll;extension=php_mysqli.dll前面指定了php的ext路径后,只要把需要的扩展包前面所对应的“;”去掉,就可以了。这里打开php_mysql.dll和php_mysqli.dll,让php支持mysql。当然不要忘掉很重要的一步就是,把php5目录下的libmysql.dll文件复制到C:\Windows目录下,也可以在系统变量里面指定路径,当然这里我选择了更为方便的方法^_^。到这里,php已经可以支持mysql了。接下来我们来配置php,让php能够与nginx结合。找到;cgi.fix_pathinfo=1我们去掉这里的封号。cgi.fix_pathinfo=1这一步非常重要,这里是php的CGI的设置。2)nginx的安装与配置。把下载好的nginx-1.0.4的包同样解压到D盘的wnmp目录下,并重命名为nginx。接下来,我们来配置nginx,让它能够和php协同工作。进入nginx的conf目录,打开nginx的配置文件nginx.conf,找到location/{roothtml;#这里是站点的根目录indexindex.htmlindex.htm;}将roothtml;改为rootD:/wnmp/www;再往下,找到复制代码#.0.0.1:9000##location~\.php${#roothtml;#fastcgi_pass127.0.0.1:9000;#fastcgi_indexindex.php;#fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;#includefastcgi_params;#}复制代码先将前面的“#”去掉,同样将roothtml;改为rootD:/wnmp/www;。再把标记为红色的/scripts改为“$document_root”,这里的“$document_root”就是指前面“root”所指的站点路径,这是改完后的:复制代码#.0.0.1:9000#location~\.php${rootD:/wnmp/www;fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;includefastcgi_params;}复制代码保存配置文件,就可以了。nginx+php的环境就初步配置好了,来跑跑看。我们可以输入命令来启动php,并手动启动nginx,当然也可以利用脚本来实现。首先把下载好的RunHiddenConsole.zip包解压到nginx目录内,RunHiddenConsole.exe的作用是在执行完命令行脚本后可以自动关闭脚本,而从脚本中开启的进程不被关闭。然后来创建脚本,命名为“start_nginx.bat”,我们在Notepad++里来编辑它复制代码@echooffREMWindows下无效REMsetPHP_FCGI_CHILDREN=5REM每个进程处理的最大请求数,或设置为Windows环境变量setPHP_FCGI_MAX_REQUESTS=:/wnmp/php5/php-cgi.exe-b127.0.0.1:9000-cD:/wnmp/php5/php.:/wnmp/nginx/nginx.exe-pD:/wnmp/nginx复制代码再另外创建一个名为stop_nginx.bat的脚本用来关闭nginx@/F/IMnginx.exe>/F/IMphp-cgi.exe>nulexit做好后,是这样的这样,我们的服务脚本也都创建完毕了。双击start_nginx.bat看看进程管理器是不是有两个nginx.exe的进程和一个php-cgi.exe的进程呢?这样nginx服务就启动了,而且php也以fastCGI的方式运行了。到站点目录下,新建一个phpinfo.php的文件,在里面编辑保存后,打开浏览器输入“phpinfo.php”,如果看到就说明,nginx+php的环境已经配置好了,呵呵~
‘叁’ win7下 nginx cgi 配置文件在哪
在win7下用的是IIS做web服务器,但近来因项目需求的原因,需要在服务器遇到404错误的时候自动做转向(不是在客户端的跳转,而是在服务器收到客户端请求去某目录下读取文件返回时,如果发现目录或目录下文件不存在,自动转到另一个服务器去取),用IIS发现很难做到这点,于是决定搭建nginx的开发环境,通过配置实现这一点。 首先,google nginx和php,分别到他们的官网把最新版本的下载回来,我当时下的PHP是5.4.3的版本,nginx是1.5.2,我把他们都放在D盘下一个叫webserver的文件夹里,然后开始做配置了。 nginx的启动很简单,进入它的目录,然后双击nginx.exe,如果没有端口冲突等问题的话,直接在浏览器输入localhost就可以访问welcome to nginx字样的网页了,这是默认的欢迎页面,放在自带的默认网页文件目录html下的。难道就这么简单吗?当然不是的。 这时如果你在html目录下建一个php文件,写上一句测试php环境的最经典的,然后在浏览器输入这个php文件的路径进行访问,你会发现nginx根本不懂怎样去解析php代码,这是因为nginx与PHP还没有配合起来。按道理来说,当遇到php文件的时候,nginx应该把它交给php的fast-cgi来处理,然后把处理完的结果返回给客户端(浏览器)的。 怎样告诉nginx当遇到php文件时交给谁处理呢?打开nginx1.5.2的文件夹,找到conf目录,编辑目录下的nginx.conf文件,我的编辑结果如下所示,具体配置过程中需要注意什么请看注释: server { listen 80; server_name localhost; charset utf-8; location / { root E:/work/jentian/client;//html文件目录,由于我们项目的客户端代码与服务端服务是严格分开的,所以这里的root跟php的root不同 index index.html index.htm; } location ~ .php { root E:/work/jentian/server; //php文件目录 fastcgi_param SCRIPT_FILENAME E:/work/jentian/server$fastcgi_script_name;//注意,$fastcgi_script_name前面的路径必须与root是一致的 fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; include fastcgi_params; } } nginx的配置也就这么多了,很简单吧,但这时候当你刷新php页面的时候,会发现nginx现在还是没有办法解析php文件,原因在于php的fast-cgi还没有启动,如果打开一个普通的命令提示符窗口,然后输入命令启动fast-cgi时,启动后这个窗口是不能关闭的,否则fast-cgi的进程也会终止,不能继续解析php文件了,后来查了一下,原来windows是有一个运行隐形控制台的方法的,用这个方法启动fast-cgi,就不怕关闭控制台后fast-cgi也跟着结束的问题的。最后,写了一个批处理文件来启动fast-cgi和nginx,这能就能一键启动nginx+php的环境了。下面是这个批处理文件的内容: @echo off set PHP_FCGI_MAX_REQUESTS = 1000 echo Starting PHP FastCGI... rem 下面这里的分别替换成你的php-cgi.exe和php.ini的路径 ,后面的-b,-c等参数必须保留且注意前后空格 RunHiddenConsole D:/webServer/php-5.4.3/php-cgi.exe -b 127.0.0.1:9000 -c D:/webServer/php-5.4.3/php.ini //这里 echo Starting nginx... rem 注意替换成你的nginx目录 D:/webServer/nginx-1.5.2/nginx.exe -p D:/webServer/nginx-1.5.2/ cd D:/webServer/nginx-1.5.2/ pause 把这个批处理文件保存到好,双击,就能启动你的nginx+php环境了,这时再刷新一下你的phpinfo页面,一切正常了。
‘肆’ 怎么在nginx中运行php文件
nginx中不能直接运行php文件,只能通过调用外部CGI处理器运行php文件。php的CGI处理器在linux中常用的是 php-fpm。在win中就只能是 php-cgi.exe 了。相关CGI的知识请网络,可以使用'nginx CGI'关键字进行查询。
‘伍’ 如何在Nginx中使用CGI
Nginx+PHP运行环境
首先安装好你的Nginx和PHP环境,PHP版本要求5.3以上。如果你没有安装过,可Google搜索相关教程,也可以参照Nginx和PHP官方的文档。这是第一步,有一个正常的Nginx + PHP的运行环境。
配置Nginx
nginx可参考如下配置:
server {
listen 80;
server_name jockchou.gitblog.cn;
root /data/vhosts/jockchou.gitblog.cn;
index index.html index.htm index.php;
location ~ \.(jpg|png|gif|js|css|swf|flv|ico)$ {
expires 12h;
}
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?$1 last ;
break;
}
}
location ~* ^/(doc|logs|app|sys)/ {
return 403;
}
location ~ .*\.(php|php5)?$
{
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
将以上配置中的server_name和root改成你自己的,fastcgi_pass配成你的CGI进程端口。
权限配置
由于Gitblog的缓存机制需要写 app/cache 目录,必要时请查看并修改这个目录的权限,以确保你的PHP拥有写这个目录的权限。通常你只需要将此目录的所属者和组修改成CGI的运行账户。
运行
以上配置好以后,启动你的Nginx和CGI服务,上传Gitblog源代码到网站目录,通过浏览器访问解析到本机的域名观察页面效果。如果页面没有正常显示,通过错误码来检查你的CGI和Nginx配置。
Gitblog介绍
‘陆’ windows下nginx 启动php-cgi进程数量怎么修改
NMP环境现在还是比较多人用的,下面介绍一个修改php-cgi进程数的方法: 一、修改php-cgi: vi /usr/local/nginx/conf/nginx.conf 二、其中worker_processes 1;可以修改成2或3个,nginx本身就很强大,不需要像apache那样,开启过多的进程来保证其稳定运行。 vi /usr/local/php/etc/php-fpm.conf 三、找到,按你的内存容量修改PHP进程的数量,一般128内存开启6个,256内存开启16个。这样能保证,在PHP大并发的情况下不会502错误,注:PHP5.3系列不需要修改。 四、优化后,重启lnmp /root/lnmp restart
‘柒’ nginx,php-cgi部署环境后,出现502错误,怎么办
这么巧呀,最近我也遇到这种问题。我已经找到了相关的解决方法。将网上找到的一些和502 Bad Gateway错误有关的问题和排查方法列一下,先从FastCGI配置入手:1.FastCGI进程是否已经启动2.FastCGI worker进程数是否不够运行 netstat -anpo | grep “php-cgi” | wc ,
我建议楼主去后盾人平台看一看,我就是从那里学习借鉴的。相信你一定能够受益匪浅。
‘捌’ linux 配置nginx+php-cgi服务器分离的错误:No input file specified
首先你要检查FastCGI开启的是TCP正常是WIndowsSocket。
通过Telnet相应的端口或者检查php-fpm.conf配置文件可以查出。
假如开启了,看是IP。还是127.0.0.1,
开成0.0.0.0:9000这样全部可以访问,如果127只有本机可以访问。
估计是这块的问题。