一、安装
1.更新和安装
sudo apt-get update
sudo apt-get install nginx
2.安装结束后,启动nginx
sudo /etc/init.d/nginx start
3.配置php和mysql
sudo apt-get install php5-cli php5-cgi mysql-server php5-mysql
CGI:“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。在服务器环境中,为“程序”提供标准的接口,通过这个接口,“程序”可以对服务器与客户端交换的信息做一些事情。“程序”的语言并没有要求。程序对接口进行操作。服务器要支持CGI就要提供CGI中要求的环境变量,或者还有别的。我的理解至此为之。 CLI:“ 命令行界面”(Command Line Interface),可在用户提示符下键入可执行指令的界面。
4.安装fastcgi
sudo apt-get install spawn-fcgi
二、配置Nginx
修改nginx的配置文件,默认文件为/etc/nginx/sites-enabled/default
1. 配置主机名 server_name localhost;
2.修改index的一行,添加index.php
index index.php index.html index.htm;
3.去掉下面部分的注释用于支持 php 脚本:
location ~ .php$ { ........}
然后重新启动nginx
sudo /etc/init.d/nginx restart
启动fastcgi
spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi
三、测试
在浏览器中输入localhost,返回
Welcome to nginx!
文本,说明nginx配置成功。
四、配置解析
在初次安装环境中遇到一系列问题,本想写出解决问题的方法,但是还是觉得明白了配置文件中具体的含义,才能万变不离其宗,更快的找到问题源头:
nginx.conf配置文件
nginx在启动时会加载这个文件来读取需要的配置,
#定义Nginx运行的用户和用户组
user www www;
#nginx进程数,建议设置为等于CPU总核心数。
worker_processes 8;
#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log info;
#进程文件
pid /var/run/nginx.pid;
#省略................
HTTP{
#省略................
# nginx会从这两个路径中加载nginx的配置文件。
# 当需要配置多网站类型时,需要在下面两个文件夹中设置多个配置文件最好在
# 第二个路径中设置文件
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
/etc/nginx/sites-enabled/中的配置文件
server {
#定义服务器监听的端口
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
#主机根目录
root /usr/share/nginx/html;
#索引类型
index index.php index.html index.htm;
#省略............
location ~ \.php$ {
#fastcgi连接ip:端口
fastcgi_pass 127.0.0.1:9000;
#php脚本执行路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
}
问题查找顺序:
php安装成功 -> nginx启动 -> fastcgi启动 -> nginx.conf -> /etc/nginx/sites-enabled/配置文件 -> 脚本执行路径
五、附
FastCGI原理
1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。