Kohana 默认仅对 Apache 环境提供的部署支持,其实对于 Nginx+FastCGI 也是很容易支持的。本文搭建环境是 Ubuntu 10.4 并采用 apt-get 方式安装,喜爱编译的朋友可以自行解决 :)
1. 安装 MySQL
1$ sudo apt-get install mysql-server mysql-client
安装过程在会提示设置 root 账户的密码,如果是本机测试开发可以留空后稍候设置。
2. 安装 Nginx
1# 安装 Nginx
2$ sudo apt-get install nginx
3
4# 启动 Nginx
5$ sudo /etc/init.d/nginx start
完成上面两步之后,打开浏览器,输入 localhost 或 127.0.0.1 如果看到 Welcome to Nginx! 字样就说明安装成功了,是不是很简单 :)
注意,如果你的机器上面如果安装了其他 web 容器(比如 Apache,Lighttd等),启动 ngnix 的时候肯定会报错,因为这些 web 容器启动均占用的 80 端口,更改的方法如下:
编辑 /etc/nginx/sites-available/default
文件,修改 server 段中的 listen
为 localhost:8080,其中 8080 是更改的监听端口:
1server {
2listen localhost:8080;
3server_name localhost;
4# [...]
保存后重启 Nginx:
1$ sudo /etc/init.d/nginx restart
3. 安装 PHP5
PHP 在 Nginx 下是通过 FastCGI 模式运行的,使用 Debain 的包管理可以安装 PHP5 和一些必须的(比如,php5-mysql)和可选的扩展(比如,Kohana 要求的 php5-curl,php5-gd,php5-mcrypt),下面前 5 个是必须的,其他可以依据个人需求添加或减少:
1$ sudo apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-mcrypt php5-idn php-pear php5-imagick php5-imap php5-memcache php5-mhash php5-ming php5-pspell php5-recode php5-snmp php5-tidy php5-xmlrpc php5-xsl
安装完毕后,需要编辑 php 的配置:
1# 编辑 /etc/php5/cgi/php.ini 文件
2# 修改 cgi.fix_pathinfo 的值为 1(如果此项被注解掉了,请删除前面的 # 符号) cgi.fix_pathinfo = 1
至此 PHP5 已经安装完毕,但是还没有结束,因为我们还没有让它支持 FastCGI 嗯,由于 Debain 包并没有提供单独的 FastCGI 守护程序,因此我们可以使用其他的方式实现,通常使用的是 lighttpd 项目提供的 spawn-fcgi(本文也用的这个,但是它总会出现小毛病,导致 Nginx 服务 Down 掉,稍候也会给出一点解决方案)或者是 PHP-FPM(专门为 PHP 提供 FastCGI 进程管理的软件)
好吧,让我们在安装 lighttpd:
1$ sudo apt-get install lighttpd
安装完毕后会你发现一些错误信息:
1Starting web server: lighttpd
22010-05-31 10:44:51: (network.c.300) can not bind to port: 80 Address already in use failed!
还是上面提到的重复占用端口的问题,不过由于我们只是使用它的 spawn-fcgi 因此我们可以不让它当作服务启动:
1$ sudo update-rc.d -f lighttpd remove
好了,让我们开启 FastCGI 守护进程:
1$ /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
其中 -a 代表 ip 地址, -p 是进程的端口, -u 是用户, -g 是用户组,-f 是 php5-cgi
的执行路径,-P 是进程的 pid,可以适当的在后面在加一个 -C 参数,这个数创建的进程数,本机开发的话一般设置在 3 - 5 左右即可(也可以使用 ab 测试以设置适当的进程数,这样可以防止 Nginx 的无辜 Down 掉)
提示:spawn-fcgi 必须在运行的状况下才能使得 Nginx 支持 PHP 运行,因此可以把上面的启动代码追加到 /etc/rc.local 文件的尾部保存(在 exit 命令之前)。
4. 配置 Nginx
Nginx 的配置相对比较简单,语法很像 PHP 代码,如果不了解的可以参考这个:范例1和范例2
编辑 /etc/nginx/nginx.conf 文件并作如下修改:
1[...]
2worker_processes 5;
3[...]
4keepalive_timeout 2;
5[...]
定义虚拟主机的配置项存放在 /etc/nginx/conf.d/
目录下面,每个虚拟主机配置一个文件并以 .conf 为文件后缀即可,默认是 default,也就是上面修改 Nginx 默认监听端口的文件,这里还要进一步对它配(点击右侧展开):
1[...]
2server {
3listen 80;
4server_name _;
5access_log /var/log/nginx/localhost.access.log;
6location / {
7root /var/www/nginx-default;
8index index.php index.html index.htm;
9}
10
11location /doc {
12root /usr/share;
13autoindex on;
14allow 127.0.0.1;
15deny all;
16} l
17
18ocation /images {
19root /usr/share;
20autoindex on;
21}
22
23# error_page 404 /404.html;
24# redirect server error pages to the static page /50x.html
25# error_page 500 502 503 504 /50x.html;
26location = /50x.html {
27root /var/www/nginx-default;
28}
29
30# proxy the PHP scripts to Apache listening on 127.0.0.1:80
31#location ~ \.php$ {
32#proxy_pass http://127.0.0.1;
33#}
34
35# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
36location ~ \.php$ {
37fastcgi_pass 127.0.0.1:9000;
38fastcgi_index index.php;
39fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
40include fastcgi_params;
41}
42
43# deny access to .htaccess files, if Apache's document root # concurs with nginx's one
44# location ~ /\.ht {
45deny all;
46}
47}
48
49[...]
说明下里面的个别参数:
server_name 是虚拟主机的服务器入口名称,可以是 IP 也可以是域名。
location 段,我在 index 追加了 index.php, root 路径是 /var/www/nginx-default
说明该虚拟主机的根目录在这里。
最重要的是关于 PHP 部分的 location 段:~ \.php$ {},Nginx 默认没有开启,我们要确保它开启并在 fastcgi_param 一行更改了参数(因为浏览器调用的默认 PHP 解析器无法找到 PHP 脚本):
1fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
最后确保在 include 和 fastcgi_params 之间隔出几个空格(BUG)
重启 Nginx,然后编辑一个 info.php 文件:
1// 创建 /var/www/nginx-default/info.php 文件
保存后在浏览器访问(比如:http://localhost/info.php 或 http://localhost:8080/info.php),如看到 phpinfo 的参数页面说明配置安装成功 :)
5. 安装&配置 Kohana
Kohana 采用的 v3 版本,安装步骤(本文把 kohana 存放在 /home/icyleaf/php/kohana
目录)
添加 Nginx 虚拟主机配置文件:
1# 创建 /etc/nginx/conf.d/kohana.conf 文件
2server {
3listen kohana.local:8080;
4server_name kohana.local;
5access_log /var/log/nginx/kohana.access.log;
6
7# define server root path
8set $root_path /home/icyleaf/php/kohana;
9
10location / {
11root $root_path; index index.php index.html index.htm;
12if (!-e $request_filename) {
13rewrite ^/(.*)$ /index.php?kohana_uri=/$1 last;
14}
15}
16
17# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
18location ~ \.php$ {
19root $root_path;
20fastcgi_pass 127.0.0.1:9000;
21fastcgi_index index.php;
22fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name; include fastcgi_params;
23}
24}
配置中首先定义了一个变量 $root_path 指定 Kohana 的源码的路径,对于 Kohana 的 URL rewrite url 重点是 location 段的:
1if (!-e $request_filename) {
2rewrite ^/(.*)$ /index.php?kohana_uri=/$1 last;
3}
编辑完成后重载 Nginx 配置:
1$ sudo /etc/init.d/nginx reload
至此教程结束,额外说明的是 Kohana 默认的 .htaccess 对 Nginx 无效可有可无 :)