当我尝试从 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-fpm
,nginx
来自apt-get
。
3.我注意到,注释掉SCRIPT_NAME
(SCRIPT_FILENAME
在fastcgi_params
文件中)会导致codeigniter显示错误。但是,在上面的当前配置上注释这些内容不会产生任何影响。
4.下所有文件的文件权限/usr/share
是777
,我知道这是不安全的,但我仅将其用于测试。
答案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 之后。