1.1.安装
$sudo apt-get install nginx
ubuntu安装Nginx之后的文件结构大致为:
所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下
启动程序文件在/usr/sbin/nginx
日志放在了/var/log/nginx中,分别是access.log和error.log
并已经在/etc/init.d/下创建了启动脚本nginx
默认的虚拟主机的目录设置在了/usr/share/nginx/html
1.2查看是否启动成功
ps -ef|grep nginx
可以看出有一个master进程和4个worker进程。
用浏览器可以测试nginx安装是否成功。
http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
解压缩以后,进入目录下执行如下安装命令:
$./configure
$make
cp ./src/spawn-fcgi /usr/sbin/
安装之后,spawn-fcgi命令就可以直接使用了,它的可执行文件在/usr/sbin/spawn-fcgi。
写fastcgi程序还需要fastcgi的库和头文件支持(就好像写多线程程序需要-lpthread一样)
下载地址:http://pkgs.fedoraproject.org/repo/pkgs/fcgi/fcgi-2.4.0.tar.gz/d15060a813b91383a9f3c66faf84867e/
./configure
make
make install
注意安装会报错
fcgio.cpp:50: error: ‘EOF’ was not declared in this scope
解决办法:
在/include/fcgio.h文件中加上 #include <cstdio>
,然后再编译安装就通过了。
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include <fcgi_stdio.h>
using namespace std;
int main()
{
/* Initialization Code */
int count = 0;
/* Start of response loop */
while (FCGI_Accept() >= 0)
{
//* body of response loop /*/
FCGI_printf("Content-type: text/html\r\n\r\n"
"FastCGI Hello,ZHB! (C, fcgi_stdio library)"
"\nRequest number %d running on host %s "
"Process ID: %d\n",
++count,
getenv("SERVER_NAME"), getpid());
}
/* End of response loop */
return 0;
}
特别注意:不能用c语言中的printf函数,要用FCGI_printf函数。另外输出的第一行要符合http包头格式:Content-type: text/html\r\n\r\n,否则都会出现502错误。
编译后为FastCGISameple
g++ fcgi.cpp -o fcgisample -lfcgi
测试程序是否能正常运行:./fcgisample,如果能正常运行则说明程序没有问题,如果出现缺少库libfcgi.so.0,则自己需要手动把/usr/local/lib/libfcgi.so.0库建立一个链接到/usr/lib/目录下:ln -s /usr/local/libfcgi.so.0 /usr/lib/
cd /usr/sbin
sudo ./spawn-fcgi -a 127.0.0.1 -p 9000 -C 25 -f /export/servers/nginx/fcgisample
上面命令参数中,-p指定FastCGI进程管理器监听的端口号,-F指定spawn-fcgi将fork多少个child进程(之后Nginx对于此cgi的请求就可以并发处理了,这里默认是一个进程)。
查看一下9000端口是否已成功:netstat -na | grep 9000
vim /etc/nginx/nginx.conf
在http{ }里添加:
server {
listen 8081;
location / {
root /export/servers/nginx;
index index.html;
}
location ~ \.cgi$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.cgi;
#fastcgi_param SCRIPT_FILENAME /export/servers/nginx$fastcgi_script_name;
include fastcgi_params;
}
}
这里配置的端口号是8081,如果不配置的话,会与nginx默认的80端口搞混乱,出现404错误。
别忘了,重新加载配置文件(1430是nginx主进程号)
$sudo kill -HUP 1430
或者重启nginx
./nginx -s reload
如C++一样,nginx需要fastcgi才能解析php,php中的fastcgi用的最多的就是PHP-FPM。
PHP5可以在nginx上通过PHP-FPM(PHP—FPM(FastCGI Process Manager) 是一个可选的 FastCGI。 说明:Nginx不支持对外部程序的直接调用或解析,所有的外部程序(包括PHP)必须通过FastCGI接口调用。
sudo apt-get install php5-fpm
PHP-FPM是一个守护进程(init脚本文件在/etc/init.d/php5-fpm),它运行了一个FastCGI server,它对应的socket文件在/var/run/php5-fpm.sock。
在nginx加入如下配置:
location ~ \.php$ {
root /export/servers/nginx;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
}
root的路径是php文件所在路径,
fastcgi_pass是php-fpm的socket文件,也可以用127.0.0.1:9000,9000是php-fpm进程的端口号
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
这个配置指定了脚本名对应的文件名,如访问localhost/index.php,即访问的是root路径下的index.php文件。
运行结果: