zhengmz 发表于 2013-12-24 17:42:07

在lnmp中配置CodeIgiter

本帖最后由 zhengmz 于 2013-12-24 17:49 编辑

使用http://lnmp.org/提供的“LNMP一键安装包”后,如果直接使用CodeIgiter,会出现500的错误。
之前在本站搜索到的一些nginx.conf配置,都有些不足:
比如:1. 出现phpmyadmin无法正常访问;
         2. 多项目目录下的支持不好。
为此,我找了一通,最终在李开涌的《PHP MVC开发实战》中找到一种配置方法,还是很好用的,分享给大家:
第一步,查看php.ini是否已经开启cgi.fix_pathinfo支持,代码如下:

cgi.fix_pathinfo=1

第二步,配置nginx.conf,直接将原配置中关于php部分的配置修改如下:

                location ~ .+\.php
                        {
                              try_files $uri =404;
                              fastcgi_passunix:/tmp/php-cgi.sock;
                              fastcgi_index index.php;
                              include fcgi.conf;

                              set $script $uri;
                              set $path_info "/";
                              set $real_script_name $fastcgi_script_name;
                              if ($uri ~ "^(.+\.php)(/.+)") {
                                        set $script $1;
                                        set $path_info $2;
                              }
                              fastcgi_param PATH_INFO $path_info;
                              fastcgi_param SCRIPT_FILENAME $document_root$script;
                              fastcgi_param SCRIPT_NAME $real_script_name;
                              fastcgi_param SCRIPT_NAME $script;
                        }

(注:“location ~ .+\.php”只有一个反斜杠)

第三步,为支持index.php文件隐藏,在nginx中配置如下:

                location /phpmyadmin/ {
                        index index.php;
                }

                location /projectA/ {
                        index index.php;

                        if (!-e $request_filename) {
                              rewrite ^/mifi/(.*)$ /mifi/index.php/$1 last;
                              break;
                        }
                }

                location / {
                        index index.php;

                        if (!-e $request_filename) {
                              rewrite ^/(.*)$ /index.php/$1 last;
                              break;
                        }
                }

其中,配置“location /projectA/”就是为了实现多项目环境。

重启php-fpm和nginx就可以了。

欢迎大家批评指正。

Bobby 发表于 2013-12-25 09:59:50

cgi.fix_pathinfo 为1 是不是出现过安全漏洞?

zhengmz 发表于 2013-12-25 17:29:00

本帖最后由 zhengmz 于 2013-12-25 17:33 编辑

Bobby 发表于 2013-12-25 09:59 static/image/common/back.gif
cgi.fix_pathinfo 为1 是不是出现过安全漏洞?
还真是,谢谢提醒,网络上介绍了很多这方面的问题,nginx的配置确实不如Apache好用。不知大侠有没有好的建议?

Bobby 发表于 2013-12-25 19:54:40

没用过lnmp,不知道为什么500,但开发环境、生产环境用的倒没什么问题,设置下PATH_INFO 应该就可以了吧, 这边的配置文件参考http://pengbotao.cn/codeigniter-initialization-debug.html

zhengmz 发表于 2014-1-19 16:21:57

Bobby 发表于 2013-12-25 19:54 static/image/common/back.gif
没用过lnmp,不知道为什么500,但开发环境、生产环境用的倒没什么问题,设置下PATH_INFO 应该就可以了吧,...
感谢帮忙。我最终修改如下:

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

                fastcgi_split_path_info ^(.+\.php)(.*)$;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;

            fastcgi_pass   127.0.0.1:9000;
            include      fastcgi_params;
}

同时,关掉了在php.ini中的参数:cgi.fix_pathinfo=0
参考了http://codeigniter.org.cn/forums/forum.php?mod=viewthread&tid=7815。
页: [1]
查看完整版本: 在lnmp中配置CodeIgiter