web-dev-qa-db-ja.com

nginx上のZendFramework

私が取り組んできたZendFrameworkベースのサイトは、現在、本番サーバーに移行されています。このサーバーはnginxであることが判明しました(驚きです!)。当然、このサイトはApacheで開発されており、htaccessファイルに依存しているため、正しく機能しません。

私の質問は...誰かがこれについて何か経験がありますか? htaccessファイルが行うことをnginx.confファイルに変換する方法に関するアイデアはありますか?私はこれを研究していますが、誰かがすでにこれを経験していることを望んでいます。ありがとう!

編集:これは現在のhtaccessです:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]
16
rg88

私はそれがかなり古いスレッドであることを知っていますが、とにかく何人かの人々を助けるかもしれません。

基本的には404エラーをindex.phpにリダイレクトしますが、ファイルが存在する場合(ファイルを入力)、正しいルートが設定されます。

頭のてっぺんからやりました。すぐには機能しない可能性があり、正しいパスとfastcgi構成を設定する必要があります。また、Zend_Frameworkでそのように機能するはずなので、すべてをindex.phpに戻します。

error_page  404 = /index.php;

location / {
    if (-f $request_filename) {
        root   /var/www;
    }
}

location ~ \.php$ {
        fastcgi_pass   unix:/tmp/php.sock;
        fastcgi_index  index.php;

        fastcgi_param  SCRIPT_FILENAME     /var/www/index.php;
        include /etc/nginx/fastcgi_params;
}
17
stunti
server {

 listen   80; ## listen for ipv4
 listen   [::]:80 default ipv6only=on; ## listen for ipv6

 server_name  localhost;

 access_log  /var/log/nginx/localhost.access.log;
 error_log  /var/log/nginx/localhost.error.log;

 root   /var/www/localhost/public;

 try_files $uri @php_index;

 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 #
 location @php_index {
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_param  SCRIPT_FILENAME /var/www/localhost/index.php;
  include fastcgi_params;
 }
}

可能な限りtry_filesを使用することをお勧めします。

29
another one

Htaccessファイルを自動/体系的に変換する方法はわかりません。おそらく手動で変換する必要があります。 Nginx wiki はnginxドキュメントに最適なリソースです。

編集:私は今NginxでZend Frameworkを実行していますが、構成は次のようになります。

server {
  listen 80;
  server_name servername.com;

  root /var/www/zendapp/public;

  location / {
    index index.php;
  }

  # Deny access to sensitive files.
  location ~ (\.inc\.php|\.tpl|\.sql|\.tpl\.php|\.db)$ {
    deny all;
  }
  location ~ \.htaccess {
    deny all;
  }

  # Rewrite rule adapted from zendapp/public/.htaccess
  if (!-e $request_filename) {
    rewrite ^.*$ /index.php last;
  }

  # PHP scripts will be forwarded to fastcgi processess.
  # Remember that the `fastcgi_pass` directive must specify the same
  # port on which `spawn-fcgi` runs.
  location ~ \.php$ {
    include /etc/nginx/fastcgi_params;

    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
  }

  location = /50x.html {
      root   /var/www/default;
  }
}

ご覧のとおり、書き換えルール自体は非常に単純です。

13
mooware

これは「公式」で、シンプルでうまく機能します。

http://wiki.nginx.org/Zend_Framework#Time_for_nginx

8

役立つ可能性のあるステージングサーバーの場合;)

            fastcgi_param APPLICATION_ENV staging;
7
nerkn

実際、私はzendフレームワークのように機能するdrupalサイトでnginxを実行します:ブートストラップとして1つのindex.php

これがルールです(zendフレームワークではテストされておらず、drupalでのみテストされていますが、類似している必要があります)

location / {
            if (!-e $request_filename) {
                    rewrite  ^/(.*)$  /index.php?q=$1  last;
                    break;
        }
    }

error_page  404              /index.php;
4
jacktrade

http://some.url/myproject/controller/ のようなプロジェクトのサブディレクトリを使用する場合は、setBaseUrlをbootstrapファイルに追加する必要もあります。

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initSomeFancyName()
    {
        $this->bootstrap('frontController');
        $frontController = Zend_Controller_Front::getInstance();
        $frontController->setBaseUrl('/myproject'); // set the base url!
    }
}

Nginxの書き換えは次のようになります。

location /myproject/ {
  if (!-e $request_filename) {
    rewrite ^/myproject/(.*)$ /index.php?$1? last;
  }
}

PS疑問符はタイプミスではありません!

2
dz0ny

可能であれば、Nginxボックスからのみアクセス可能な非標準ポートにApacheをセットアップし、ApacheへのNginxプロキシを用意することをお勧めします。

Nginxプロキシドキュメント

0
Jordan S. Jones