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

在lnmp中配置CodeIgiter

[复制链接]
发表于 2013-12-24 17:42:07 | 显示全部楼层 |阅读模式
本帖最后由 zhengmz 于 2013-12-24 17:49 编辑

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

  1. cgi.fix_pathinfo=1
复制代码

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

  1.                 location ~ .+\.php
  2.                         {
  3.                                 try_files $uri =404;
  4.                                 fastcgi_pass  unix:/tmp/php-cgi.sock;
  5.                                 fastcgi_index index.php;
  6.                                 include fcgi.conf;

  7.                                 set $script $uri;
  8.                                 set $path_info "/";
  9.                                 set $real_script_name $fastcgi_script_name;
  10.                                 if ($uri ~ "^(.+\.php)(/.+)") {
  11.                                         set $script $1;
  12.                                         set $path_info $2;
  13.                                 }
  14.                                 fastcgi_param PATH_INFO $path_info;
  15.                                 fastcgi_param SCRIPT_FILENAME $document_root$script;
  16.                                 fastcgi_param SCRIPT_NAME $real_script_name;
  17.                                 fastcgi_param SCRIPT_NAME $script;
  18.                         }
复制代码

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

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

  1.                 location /phpmyadmin/ {
  2.                         index index.php;
  3.                 }

  4.                 location /projectA/ {
  5.                         index index.php;

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

  11.                 location / {
  12.                         index index.php;

  13.                         if (!-e $request_filename) {
  14.                                 rewrite ^/(.*)$ /index.php/$1 last;
  15.                                 break;
  16.                         }
  17.                 }
复制代码

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

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

欢迎大家批评指正。
发表于 2013-12-25 09:59:50 | 显示全部楼层
cgi.fix_pathinfo 为1 是不是出现过安全漏洞?
 楼主| 发表于 2013-12-25 17:29:00 | 显示全部楼层
本帖最后由 zhengmz 于 2013-12-25 17:33 编辑
Bobby 发表于 2013-12-25 09:59
cgi.fix_pathinfo 为1 是不是出现过安全漏洞?

还真是,谢谢提醒,网络上介绍了很多这方面的问题,nginx的配置确实不如Apache好用。不知大侠有没有好的建议?
发表于 2013-12-25 19:54:40 | 显示全部楼层
没用过lnmp,不知道为什么500,但开发环境、生产环境用的倒没什么问题,设置下PATH_INFO 应该就可以了吧, 这边的配置文件参考http://pengbotao.cn/codeigniter-initialization-debug.html
 楼主| 发表于 2014-1-19 16:21:57 | 显示全部楼层
Bobby 发表于 2013-12-25 19:54
没用过lnmp,不知道为什么500,但开发环境、生产环境用的倒没什么问题,设置下PATH_INFO 应该就可以了吧,  ...

感谢帮忙。我最终修改如下:

  1. location ~ ^(.+\.php)(.*)$ {
  2.             fastcgi_index  index.php;

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

  6.             fastcgi_pass   127.0.0.1:9000;
  7.             include        fastcgi_params;
  8. }
复制代码

同时,关掉了在php.ini中的参数:cgi.fix_pathinfo=0
参考了http://codeigniter.org.cn/forums ... thread&tid=7815

本版积分规则