Проблема с приложением Cakephp, работающим в подкаталоге nginx 1.0.8 + - PullRequest
1 голос
/ 11 ноября 2011

Итак, я уже два дня бьюсь головой об эту, и пришло время попросить о помощи. Я сейчас использую приложение cakephp-1.3 на apache, но перевожу все наши серверы на nginx. Может ли кто-нибудь помочь мне понять это? Я думаю, что это двойная проблема в том смысле, что первый nginx может не иметь полностью настроенных правил перезаписи записи. Однако я вытащил их из документации на CakePHP 1.3. Второе - это торт и nginx почти спорят о том, где должен быть основатель. В любом случае, вот мой конфиг, он немного изменен по сравнению с документацией на CakePHP, но, поверьте мне, в последние несколько дней я пробовал практически все возможные перестановки. :)

server {
listen   80;
server_name backoffice.localhost;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /var/www/cake/app/webroot;

location / {
    root   /var/www/cake/app/webroot;
    index  index.php index.html index.htm;

    if (-f $request_filename) {
        break;
    }

    rewrite ^/(.+)$ /index.php?url=$1 last;
}

location ~ .*\.php[345]?$ {
    include /usr/local/nginx/conf/fastcgi.conf;
    fastcgi_pass    127.0.0.1:9000;
    fastcgi_index   index.php;
    fastcgi_param SCRIPT_FILENAME /var/www/cake/app/webroot$fastcgi_script_name;
}
}

Прямо сейчас, если я просматриваю http://backoffice.localhost, я получаю страницу входа в систему так же, как она работает на моем сервере Apache, за исключением того, что у меня нет css, как ни странно, я получаю изображения. Вот бревна

127.0.0.1 - - [10/Nov/2011:19:35:53 -0600] "GET /users/login HTTP/1.1" 200 1430 "-"     "Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.3 (KHTML, like Gecko)  Chrome/6.0.472.63 Safari/534.3"
127.0.0.1 - - [10/Nov/2011:19:35:54 -0600] "GET /img/login/images/login-btn.png HTTP/1.1" 304 0 "http://backoffice.localhost/users/login" "Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"
127.0.0.1 - - [10/Nov/2011:19:35:54 -0600] "GET /cake/css/admin/main.css HTTP/1.1" 200 1324 "http://backoffice.localhost/users/login" "Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"
127.0.0.1 - - [10/Nov/2011:19:35:54 -0600] "GET /cake/css/login/style.css HTTP/1.1" 200 1325 "http://backoffice.localhost/users/login" "Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"
127.0.0.1 - - [10/Nov/2011:19:35:54 -0600] "GET /cake/css/login/login-box.css HTTP/1.1" 200 1321 "http://backoffice.localhost/users/login" "Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3"

Итак, вы видите, что CSS-файлы отправляются правильно, верно? Но почему у меня нет форматирования CSS? Хорошо, давайте посмотрим на инструменты разработчика, включенные в Chrome, на то, что отправляется.

Missing Controller
Error:CakeController 
Error: Create the class CakeController below in file: app/controllers/cake_controller.php
class CakeController extends AppController {

   var $name = 'Cake';

}

Так что в основном происходит то, что происходит где-то в смеси, где CakePHP получает URL с / Cake / в строке URL, и CakePHP думает, что это должен быть контроллер, который он ищет. Любые мысли будут полезны.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2011

Я просто хотел оставить это здесь на случай, если кому-то еще это понадобится. Используя код wrdevos и немного его изменив, я придумал это.

server {
listen   80;
server_name backoffice.localhost;

index index.php;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /var/www/cake/app/webroot;

# Not found this on disk?
# Feed to CakePHP for further processing!
if (!-e $request_filename) {
    rewrite ^/cake/(.+)$ /$1 last;
    rewrite ^/(.+)$ /index.php?url=$request_uri last;
    break;
}

# Pass the PHP scripts to FastCGI server
# listening on 127.0.0.1:9000
location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME /var/www/cake/app/webroot$fastcgi_script_name;
    fastcgi_intercept_errors on;
    include /usr/local/nginx/conf/fastcgi.conf;
}

# Static files.
# Set expire headers, Turn off access log
location ~* \favicon.ico$ {
    access_log off;
    expires 1d;
    add_header Cache-Control public;
}

location ~ ^/(img|js|ccss)/ {
    access_log off;
    expires 1d;
    add_header Cache-Control public;
    rewrite ^/cake/(.+)$ /var/www/cake/app/weboot$1;
}
} 
0 голосов
/ 11 ноября 2011

Проверьте настройки ниже. Вы пропустили переписывание Cake, и я думаю, что вам нужно передать параметры с запросом. Я добавил несколько хороших трюков для статических файлов. Надеюсь, это поможет!

# Not found this on disk? 
# Feed to CakePHP for further processing!
if (!-e $request_filename) {
    rewrite ^/(.+)$ /index.php?url=$request_uri last;
    break;
}


# Pass the PHP scripts to FastCGI server
# listening on 127.0.0.1:9000
location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME /var/www/cake/app/webroot$fastcgi_script_name;
    fastcgi_intercept_errors on;
    include        fastcgi_params;
}

# Static files.
# Set expire headers, Turn off access log
location ~* \favicon.ico$ {
    access_log off;
    expires 1d;
    add_header Cache-Control public;
}
location ~ ^/(img|cjs|ccss)/ {
    access_log off;
    expires 1d;
    add_header Cache-Control public;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...