giftcabinet 发表于 2010-6-30 18:49:25

配置 nginx+codeigniter+php

为了配置nginx+codeigniter+php,我都不知道花了多少时间,壮烈了多少脑细胞……
主要是基本的例子程序都不成,URI的参数总是传不过去。经过………………奋战………………奋战……………………终于弄好了。给新手朋友们一个见面礼吧~~

php:5.3.2
nginx:0.8.35
server:CentOS release 5.2

1, php编译时要加上fastcgi和pfm两项,将 --enable-fastcgi --enable-fpm 打开。pfm是从svn.php.net网站上下对应的5.3版的文件。
    cd /usr/local/php-5.3.2
    svn co http://svn.php.net/repository/php/php-src/branches/PHP_5_3/sapi/fpm sapi/fpm    <-- 要先安装subversion
    ./buildconf --force    <-- 出错的话,看看是不是没装autoconf , 正确的话在./configure --help中可以看到enable-fpm这一项。
    ./configure --prefix=/usr/local/php -enable-fastcgi --enable-fpm ...    <-- 再加上你想要的参数,可能会出错几次[——!],缺什么就装什么吧.
    make
    make install
    cp php.ini-production ../php/etc/php.ini
    cd ../php
    cp etc/php-fpm.conf.default etc/php-fpm.conf
    修改php-fpm.conf文件,以下三行注释放开。
    pm.start_servers = 20    <--- 我设的5,单纯测试用的话可以小点.
    pm.min_spare_servers = 5
    pm.max_spare_servers = 35
    sbin/php-fpm -i etc/php.ini -y etc/php-fpm.conf
    ok --> php配置完成!   

2,配置nginx.conf文件,我用的是nginx 0.8.35,官网直接挡的.编译安装比较简单,主要说一下配置文件的修改.
    server {
         ......
    location / {
                root    /var/www/codeigniter;    <-- 默认的安装目录,可以修改成自己的web站点安装目录.
                indexindex.php index.htm;    <-- 加上index.php
                if (!-e $request_filename) { // 注意下边改成自己的IP地址和端口号
                        rewrite ^/(index.php/)(.*)([/])$ http://192.168.1.100:8080/$2/index.php break;
                }
      }
      ......
location ~ \.php$ {    <-- 去掉fastcgi这部分注释,主要任务就是发现是访问php的就转给PHP处理.
            include      fastcgi_params;
            fastcgi_paramSCRIPT_FILENAME/usr/local/nginx/codeigniter/index.php;    <-- 要换成自己的站点
            fastcgi_indexindex.php;
            fastcgi_pass   127.0.0.1:9000;
            if ($fastcgi_script_name ~ "^(/index.php)(/.*)(\.php)$") {    <-- 以下是uri处理部分
                set $path_info $2/;
            }
            fastcgi_param PATH_INFO $path_info;
      }
}// server

    /nginx/sbin/nginx    <-- 启动nginx
   
配置完了,希望对大家有用。:victory:

giftcabinet 发表于 2010-7-5 08:41:31

如果在url中输入的不是http://<server>/index.php/blog/ 而是 http://<server>/blog/index.php的话,会出现问题。在nginx的配置文件中的fastcgi部分加入下列代码就可以了。
if ($fastcgi_script_name ~ "^(/.*)(\.php)$") {
                set $path_info $1/;
            }

wocai 发表于 2010-7-29 15:20:28

我测试了下,你写的没有用呢,,

wocai 发表于 2010-7-29 16:12:12

server
{
    listen       80;
    server_namewww.xxx.com;
    index index.html index.htm index.php;
    root/var/www/html;

    #limit_conn   crawler20;
    location ~ .*.php
    {
      #fastcgi_passunix:/tmp/php-cgi.sock;
      fastcgi_pass127.0.0.1:9000;
      fastcgi_index index.php;
      set $path_info "";
      set $real_script_name $fastcgi_script_name;
      if ($fastcgi_script_name ~ "^(.+?.php)(/.+)$") {
      #set $real_script_name $1;
      set $path_info $2;
      }
      include fcgi.conf;
      fastcgi_param PATH_INFO $path_info;
    }

这是我修改后的,经我自己服务器测试,可运行,

banana1423 发表于 2012-6-7 16:01:10

好帖,收藏

ciogao 发表于 2012-6-7 23:54:44

不错

qingbofish 发表于 2013-1-8 19:15:33

按照这样的方法不能用
页: [1]
查看完整版本: 配置 nginx+codeigniter+php