web-dev-qa-db-ja.com

cakephpとnginxの設定/書き換えルール

こんにちは誰かが私を助けてください、私はstackoverflowでもこれを尋ねましたが、あまり応答がなく、プログラミングかサーバー関連かを議論していました。

NginxとFactCGIを実行しているCentosサーバーでcakephp環境をセットアップしようとしています。サーバー上で実行されているwordpressサイトとphpmyadminサイトがあるので、PHPが正しく構成されています。

私の問題は、ケーキがページを正しくレンダリングするように、つまりスタイリングなどで、仮想ホストで書き換えルールを正しく設定できないことです。私は可能な限りグーグルで検索しましたが、以下のようなサイトからの主なコンセンサスは、次の書き換えルールを設定する必要があるということです。

location / {
  root /var/www/sites/somedomain.com/current;
  index index.php index.html;

  # If the file exists as a static file serve it 
  # directly without running all
  # the other rewrite tests on it
  if (-f $request_filename) { 
    break; 
  }
  if (!-f $request_filename) {
    rewrite ^/(.+)$ /index.php?url=$1 last;
    break;
  }
}

http://blog.getintheloop.eu/2008/4/17/nginx-engine-x-rewrite-rules-for-cakephp

問題は、これらの書き直しは、私がやりたいことではないWebルートから直接ケーキを実行することを前提としていることです。サイトごとに標準の設定があります。つまり、サイトごとに1つのフォルダがあり、ログ、バックアップ、プライベート、パブリックのフォルダが含まれています。パブリックはnginxが提供するファイルを探している場所ですが、私はケーキをプライベートにインストールし、パブリックのシンボリックリンクを/ private/cake /にリンクしています。

これは私の仮想ホストです

server {
    listen 80;
    server_name app.domain.com;

    access_log /home/public_html/app.domain.com/log/access.log;
    error_log /home/public_html/app.domain.com/log/error.log;

    #configure Cake app to run in a sub-directory
    #Cake install is not in root, but elsewhere and configured
    #in APP/webroot/index.php**

    location /home/public_html/app.domain.com/private/cake {
        index index.php;

        if (!-e $request_filename) {
            rewrite ^/(.+)$ /home/public_html/app.domain.com/private/cake/$1 last;
            break;
        }

    }

    location /home/public_html/app.domain.com/private/cake/ {
        index index.php;

        if (!-e $request_filename) {
            rewrite ^/(.+)$ /home/public_html/app.domain.com/public/index.php?url=$1 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 /home/public_html/app.domain.com/private/cake$fastcgi_script_name;
        include        /etc/nginx/fastcgi_params;
    }

}

私が言ったように、ケーキのメインのindex.phpを見て、それをDBに接続しましたが、このページにはスタイルがないので、先に進む前に正しく構成したいと思います。何が悪いのか………。

ありがとうseanl

3
seanl

非常にシンプルでクリーンなため、cakephpでメソッドを動作させます。 (それを機能させるために、構成のコレクションに追加するために私がしたこと)

server {
    listen 80;
    server_name _;
    root /var/www/webapplication/app/webroot;

    if (-f $request_filename) {
        break;
    }
    if (!-f $request_filename) {
        rewrite ^/(.+)$ /index.php?url=$1 last;
        break;
    }

    location /favicon.ico {
        empty_gif;
    }

    location ~ .php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include /usr/nginx/conf/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /var/www/webapplication/app/webroot/index.php;
        # $fastcgi_script_name;
    }

}
2
Scott M Likens

あなたのphpファイルは "〜.php $"の場所でキャッチされており、それが機能する唯一のファイルです。

これは機能しません:

location /home/public_html/app.domain.com/private/cake/

システムパスを指定し、URIパスを指定する必要があるためです。書き換えルールも同様です。あなたの設定はApacheのようです:)なので、これはあなたが探しているものかもしれません:

location /root_of_my_site {
   alias home/public_html/app.domain.com/...
}
0
hegemon

location /cake {
    try_files   $uri  $uri/  @cakephp;
}

location = @cakephp {
    fastcgi_param  SCRIPT_FILENAME /home/public_html/app.domain.com/private/cake/index.php;
    fastcgi_param  QUERY_STRING url=$request_uri;
    fastcgi_pass   127.0.0.1:9000;
    include        /etc/nginx/fastcgi_params;
}

これは、 http://apps.server.com/cakephp 経由でcakephpにアクセスし、nginx0.7.xを使用していることを前提としています。

Nginx 0.6.xを使用している場合は、error_page 404 = @cakephpの代わりにtry_filesを使用してください。

幸運を!

0
lexsys