Назад | Перейти на главную страницу

Правила перезаписи nginx для литиевого фреймворка

Я пытался получить lithium работает с Nginx безуспешно. Структура каталогов lithium как это

lithium
  |-> app libraries .htaccess
      |-> webroot .htacess --other directories
           |-> index.php .htaccess --other files

Я скопировал lithium папку в мою /var/www/. Путь лития есть /var/www/lithium/

Теперь я настроил правила перезаписи таким образом в моем nginx.conf

server {
        listen       80;
        server_name  localhost;
        root /var/www/;

    location /lithium {
       rewrite ^/$ /app/webroot/ break;
       rewrite ^(.*)$ /app/webroot/$1 break;
    }

    location /lithium/app {
       rewrite ^/$ /webroot/ break;
       rewrite ^(.*)$ /webroot/$1 break;
     }

    location /lithium/app/webroot {
       if (!-e $request_filename){
        rewrite ^(.*)$ /index.php?url=$1 break;
        }
     }
 ...then my php and other configurations

Но nginx всегда выдает 404 ошибка. Почему так происходит?

Я тоже пробовал это

server {
            listen       80;
            server_name  localhost;
            root /var/www/;

location /lithium {
        if (!-e $request_filename) {
            rewrite ^/lithium/(.+)$ /lithium/app/webroot/$1 last;
            break;
            }
        }

        location /lithium/app/webroot {
        if (!-e $request_filename) {
            rewrite ^/lithium/app/webroot/(.+)$ /lithium/app/webroot/index.php?url=$1 last;
            break;
        }
    }
...then my php and other configurations

Но снова есть 404 ошибка.

редактировать

Так как предложил я изменил корень моего сервера на /var/www/lithium/app/webroot так что мой nginx conf выглядит так

server {
        listen   80;
        server_name localhost;

        root   /var/www/lithium/app/webroot;
        access_log /var/log/lithium/access.log;
        error_log /var/log/lithium/error.log warn;

        index  index.php index.html;

        try_files $uri $uri/ /index.php?$args;

        location ~ \.php$
        {
          .. ...
           ......

}

теперь я могу видеть дом лития, но когда я перехожу к тестовой приборной панели лития, которая http://localhost/test он снова показывает дом лития вместо тестовой панели. Когда я использую apache и перехожу по URL http://localhost/test это показывает мне test dashboard. Так что правила перезаписи nginx все еще не совсем верны. root к lithium's webroot я не могу получить доступ к другим каталогам в моем /var/www/

Отредактировал Агиан

Это мой полный серверный блок

server { 
    server_name  lithium;
    root   /var/www/lithium/app/webroot;
    access_log  /var/log/nginx/lith.access.log;
    error_log   /var/log/nginx/lith.error.log;

    listen       127.0.0.2:80;
    rewrite_log on;

    # rewrite rules for lithium
    location / {
            index  index.php index.html;

            try_files $uri $uri/ /index.php?url=$uri&$args;
    }


    location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            #include /etc/nginx/fastcgi_params;
            fastcgi_param SERVER_NAME $host;
    }

    location ~ /\.ht {
            deny  all;
    }
}

Я использую php 5.4.3. как php-fpm. Я пробовал делать то, что упоминалось на официальном сайте лития Вот но я не понимаю эту строку

cp -f sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

какое место sapi ссылаясь на? Любые идеи?

try_files $uri $uri/ /index.php?$args;

Вы не передаете URI в Lithium - вы добавляете строку запроса, которая пуста. Вероятно, вам понадобится следующее:

try_files $uri $uri/ /index.php?url=$uri&$args;

Предполагая, что Lithium ожидает вызова с index.php?uri=/test (что подразумевает ваша исходная конфигурация).

редактировать: The Литий вики предлагает верх try_files строка, что означает, что он проверяет переменные FastCGI, чтобы определить URL-адрес для обслуживания.

Было бы проще просто указать на веб-корневой каталог, используя root /var/www/lithium/app/webroot.

Или вы можете сделать следующее.

root /var/www

тогда используйте try_files вместо уродливого ifs:

index  index.php index.html;

location ~ \.php$ {
    ...
}

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

location /lithium/app/ {
    rewrite ^/lithium/app/(.*)$ /lithium/app/webroot/$1;
}

location /lithium/ {
    rewrite ^/lithium/(.*)$ /lithium/app/webroot/$1;
}

location / {
    rewrite ^(.*)$ /lithium/app/webroot/$1;
}

Не забудьте защитить другие каталоги.

Я думаю, вы неправильно указываете путь. Попробуйте запустить только базовую конфигурацию nginx: http://lithify.me/docs/manual/configuration/servers/nginx.wiki

Также может быть полезно включение ошибок php. Ошибки конфигурации, такие как установка пути к литиевым библиотекам, не очевидны, если у вас не включены ошибки php.

#include /etc/nginx/fastcgi_params;

Вы не включаете файл конфигурации, который устанавливает большинство переменных FastCGI, переданных в PHP, поэтому Lithium, вероятно, не сможет определить, какой URL-адрес запрашивается. Раскомментируйте эту строку и переместите ее над SCRIPT_FILENAME строка, чтобы ваш блок выглядел так:

location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SERVER_NAME $host;
}