配置 Nginx 和 php5-fpm 以与 Codeigniter 配合使用

配置 Nginx 和 php5-fpm 以与 Codeigniter 配合使用

当我尝试从 Apache 2 切换到 Nginx 时,我遇到了许多问题,并且仍在修复它们。无论如何,我正在尝试让它们工作,但还没有成功。所以我在这里寻求帮助/以前的经验。

我使用默认配置来运行 PHP,它在仅运行 PHP 文件时运行良好。但不幸的是,codeigniter URL 不以 *.PHP 结尾。所以我认为 PHP-FPM 不会将我的脚本视为 PHP 文件,因为 URL 不以 结尾*.PHP。不过,我只是猜测。

那么,有什么可能的方法可以让它们一起工作吗?对我来说这似乎是不可能的,我尝试了很多配置(当然,在修改它们以适合我的环境之后),但它们都不能与 Codeigniter 一起使用。

希望发布适用于普通 php 文件的当前配置能够带来一些解决方案。
笔记:这与 Nginx 的 Codeigniter 框架维基页面上发布的完全相同。

server {
        server_name _;#_ to catch all requests.

        root /usr/share/nginx/www;
        index index.html index.php;

        # set expiration of assets to MAX for caching
        location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
                expires max;
                log_not_found off;
        }

        location / {
                # Check if a file exists, or route it to index.php.
                try_files $uri $uri/ /index.php;
        }

        location ~* \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
}

使用以前的配置可以/sites-enabled/default使 PHP 工作但不能使 codeigniter 工作,我得到的只是白页,以及访问不存在的文件时 codeigniter 的自定义 404。

我还重新配置了 config.php 文件,如下所示:

$config['base_url'] = "http://localhost/";
$config['index_page']   = "";
$config['uri_protocol'] = "REQUEST_URI";

我尝试了这些配置和许多其他配置,通常结果相同。

无论如何,有几点可以(希望)让我得到答案:

1.我在 Debian 6/Ubuntu 12.04 上尝试了这些配置

我正在运行最新的php5-fpmnginx来自apt-get

3.我注意到,注释掉SCRIPT_NAMESCRIPT_FILENAMEfastcgi_params文件中)会导致codeigniter显示错误。但是,在上面的当前配置上注释这些内容不会产生任何影响。

4.下所有文件的文件权限/usr/share777,我知道这是不安全的,但我仅将其用于测试。

答案1

我找到了这个问题的解决方案。它与 Codeigniter 或 Nginx 无关。问题出在 MySQL 中,因为我自动加载了数据库库,该库在请求任何页面时都会连接到 MySQL。MySQL 本身没有安装,这就是为什么什么都不起作用的原因。

在 Debain/Ubuntu 中,我所做的就是 apt-get install mysql-server mysql-client php5-mysql设置 mysql 并重新启动 php-fpm service php5-fpm restart。然后就可以开始了。

答案2

try_files 将任何不存在的 URL 重定向到 index.php

问题是该块location ~ \.php没有被考虑在内。

将此块内的所有内容重新复制到上面的块中,就在 try_files 之后。

相关内容