用户
 找回密码
 入住 CI 中国社区
搜索
查看: 19139|回复: 13
收起左侧

[初级] Nginx+php-frm(FastCGI)的CodeIgniter平台架设攻略

    [复制链接]
发表于 2010-12-23 11:05:02 | 显示全部楼层 |阅读模式
本帖最后由 曜日晨阳 于 2010-12-24 08:58 编辑

我们要实现的目标:

  • 在nginx+php-frm(FastCGI)平台下架设CI应用
  • 去CI的index.php
  • 使用.htaccess减少对nginx.conf的修改造成的不良后果。。。


使用环境:CentOS 5.5;nginx 0.8.54;CI 1.7.3;php 5.2.14;FASTCGI......(其他略)

【正文开始】

1、Nginx.conf Rewrite规则写法(位于/path/to/nginx/conf)

server
        {
                listen       80;
                server_name www.domain.com;
                index index.html index.htm index.php;
                #设置你的站点路径
                set $wwwroot /path/to/your/wwwroot;


                location / {
                root   $wwwroot;
                index  index.html index.htm index.php;
                #rewrite规则如下:
                rewrite ^/$ /index.php last;
                rewrite ^/(?!index\.php|robots\.txt|static)(.*)$ /index.php/$1 last;

                }


                location ~ ^(.+\.php)(.*)$ {
                root           $wwwroot;

                fastcgi_index        index.php;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                fastcgi_param        SCRIPT_FILENAME        $document_root$fastcgi_script_name;
                fastcgi_param        PATH_INFO                $fastcgi_path_info;
                fastcgi_param        PATH_TRANSLATED        $document_root$fastcgi_path_info;
                #注意:去临时文件夹内找到你的php-cgi,也可能php-cgi.sock不是这么个名字。
                fastcgi_pass    unix:/tmp/php-cgi.sock;
                include        fastcgi_params;

                    }

                log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';
                access_log  /path/to/logs/wwwlogs/main.access.log  access;
        }
#引入虚拟主机目录下所有配置文档
include vhost/*.conf;

然后去CI的config里去掉index.php。

2、虚拟主机操作同上,只需要在里面删除location段,复制下面的这些进去就可以。

location / {
                root   $wwwroot;
                index  index.html index.htm index.php;
                #rewrite规则如下:
                rewrite ^/$ /index.php last;
                rewrite ^/(?!index\.php|robots\.txt|static)(.*)$ /index.php/$1 last;

                }


                location ~ ^(.+\.php)(.*)$ {
                root           $wwwroot;

                fastcgi_index        index.php;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                fastcgi_param        SCRIPT_FILENAME        $document_root$fastcgi_script_name;
                fastcgi_param        PATH_INFO                $fastcgi_path_info;
                fastcgi_param        PATH_TRANSLATED        $document_root$fastcgi_path_info;
                #注意:去临时文件夹内找到你的php-cgi,也可能php-cgi.sock不是这么个名字。
                fastcgi_pass    unix:/tmp/php-cgi.sock;
                include        fastcgi_params;

                    }

3、或者引入.htaccess文档

如何引入?

在虚拟主机/wwwroot/other.domain.com的任意位置创建.htaccess(方便ftp更改)

写入第二条中的内容。

然后,在/vhost/other.domain.com.conf文档中加入:

include /path/to/your/wwwroot/other.domain.com/.htaccess

补充:每次修改过.htaccess以后必须重加载nginx的配置,以使其生效。

#/path/to/your/nginx/sbin/nginx -s reload


即可。

收工。完毕。

评分

参与人数 1威望 +5 收起 理由
Hex + 5 我很赞同

查看全部评分

本帖被以下淘专辑推荐:

发表于 2010-12-23 16:21:59 | 显示全部楼层
强大!特别是直接引入 .htaccess 呵呵
发表于 2010-12-23 22:54:55 | 显示全部楼层
顶一个,不过让nginx支持PATH_INFO的扩展,最好放在fastcgi.conf里面,这样不用为每个站点配置PATH_INFO支持了,引入.htaccess这个确实没想到这么用,不错
发表于 2010-12-23 23:07:04 | 显示全部楼层
这个很强大!之前我在华夏名网的虚拟主机,就是ngnix的,弄这个规则可是翻了无数的资料,论坛里的也看了好多,把人折磨坏了!

看到楼主的分享,泪奔啊!
 楼主| 发表于 2010-12-24 08:53:26 | 显示全部楼层
顶一个,不过让nginx支持PATH_INFO的扩展,最好放在fastcgi.conf里面,这样不用为每个站点配置PATH_INFO支 ...
haohailuo 发表于 2010-12-23 22:54



嗯,确实是的。
但是非全局指定站点实现CI可以这样。
并不是每个指定主机都需要PATH_INFO。
发表于 2010-12-28 15:10:01 | 显示全部楼层
顶一个  感谢楼主分享
发表于 2011-3-17 00:09:17 | 显示全部楼层
支持啊!
发表于 2011-4-8 14:15:02 | 显示全部楼层
不错,引用htaccess的功能很强大,收藏了
发表于 2011-4-16 15:32:50 | 显示全部楼层
在使用nginx的时候有的浏览器无法登录是怎么一回事呢?
 楼主| 发表于 2011-4-29 13:38:45 | 显示全部楼层
回复 9# longjianghu

试试升级到nginx 0.8.54稳定版。

本版积分规则