kohana 3.2 + php-fpm + nginx 404

时间:2014-08-13 04:20:08

标签: php nginx kohana

我有一个旧的kohana应用程序,我试图把我的VPS,但似乎无法让它工作。我花了几个小时谷歌搜索并查看缓存的论坛答案。我已经尝试了所有这些似乎没有任何作用。诚然,我不知道如何处理nginx。我的本地版本的应用程序可以正常使用apache。我离取消我的linode帐户并获得共享主机只有一步之遥!请告诉我这个窗台。

我的VPS使用php5-fpm和nginx 1.4.6运行Ubuntu 14.04 LTS。我正在从我的用户目录中提供所有内容。

我的nginx网站 - 可用文件:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /home/gabreal/Sites/public;
    index index.html index.htm index.php;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
        try_files $uri $uri/ @kohana =404;
    }

    error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location ~ \.php$ {
        # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location @kohana {
        rewrite ^/(.+)$ /index.php$request_uri last;
    }
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    location ~ /\.ht {
        deny all;
    }
}

我的Kohana应用程序位于如下目录中:

├──/home/gabreal/Sites/public/
│   ├── horizons/
│   │   ├── grader/ (aka the kohana application)
│   │   │   ├── index.php
│   │   │   ├── application/
│   │   │   ├── system/

当我通过转到http://example.com/horizons/grader访问应用程序时,加载kohana引导程序文件并调用所有重定向。例如,我的默认路由会将您重定向到起始页面。如果您尚未登录,则转到“用户/登录”。网址设置正确。转到上面的网址,浏览器重定向到http://example.com/horizons/grader/user/login,但我得到 nginx 404页面

所以不知何故controller/action模式不适合这个nginx设置。

请帮助在这个世界上爱你所爱的一切。

更新

仅供参考,我安装了phpmyadmin,它运行正常。我仍然无法让kohana工作......

更新2

我做了一个新的kohana安装,并尝试设置一些基本的控制器。只有默认控制器才能像我的应用程序一样工作。所以,转到我的应用程序的基本网址总是有效但直接转到任何/ controller / action / id类型的资源在新安装上给我 nginx 404错误 和我现有的申请。

1 个答案:

答案 0 :(得分:2)

您正在使用的nginx配置不再被认为是将PHP执行传递回FPM的正确方法。以下示例基于WordPress documentation的原始部分和略微修改过的部分,是一种更适合您的方式。

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /home/gabreal/Sites/public;
    index index.html index.htm index.php;

    server_name localhost;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }
        # This is a robust solution for path info security issue and works with "cgi.fix_pathinfo = 1" in /etc/php.ini (default)

        include fastcgi.conf;
        fastcgi_index index.php;
        fastcgi_pass php;

        location ~ \.php$ {
            # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
        }
    }
}

请注意,为简洁起见,我没有包含404和50x处理程序以及.ht - 文件保护程序。您可以在问题中将这些内容放回原点。