web-dev-qa-db-ja.com

Zend Framework2をApacheからnginxに移行

Zend Framework2を使用するサイトをApacheからNginxに移動したいと思います。問題は、サイトに6つのモジュールがあり、Apacheがhttpd-vhosts.confで定義されたエイリアスによってそれを処理することです。

#httpd-vhosts.conf
<VirtualHost _default_:443>
ServerName localhost:443

Alias /develop/cpanel "C:/webapps/develop/mil_catele_cp/public"
Alias /develop/docs/tech "C:/webapps/develop/mil_catele_tech_docs/public"
Alias /develop/docs "C:/webapps/develop/mil_catele_docs/public"
Alias /develop/auth "C:/webapps/develop/mil_catele_auth/public"
Alias /develop "C:/webapps/develop/mil_web_dicom_viewer/public" 

DocumentRoot "C:/webapps/mil_catele_homepage"
</VirtualHost>

httpd.confでは、DocumentRootはC:/ webappsに設定されています。サイトは、たとえばlocalhost/develop/cpanelで利用できます。フレームワークはそれ以上のルーティングを処理します。

Nginxでは、サーバーブロックでroot C:/webapps/develop/mil_catele_tech_docs/public;を指定することで、1つのサイトのみを使用可能にすることができました。これは、docsモジュールが他のモジュールのように認証に依存せず、サイトがlocalhost/にあったためにのみ機能します。

次の試みでは:

root   C:/webapps;
location  /develop/auth {
    root   C:/webapps/develop/mil_catele_auth/public;
    try_files $uri $uri/ /develop/mil_catele_auth/public/index.php$is_args$args;
}

localhost/develop/cpanelと入力すると、index.phpが修正されますが、リソース(css、jsファイル)が見つかりません。なぜブラウザのGETリクエストの参照パスがApacheの場合と同じようにhttps://localhost/css/bootstrap.cssフォームhttps://localhost/develop/auth/css/bootstrap.cssに変更されたのかわかりません。このルートディレクティブは機能していないようです。

NginxはfastCGIを使用してphpを処理します

location ~ \.(php|phtml)?$ {        
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param   APPLICATION_ENV  production;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

私は一日中グーグルで検索しましたが、何も役に立ちませんでした。誰かがこの構成をApacheのように機能させるのを手伝ってもらえますか?

1
Aleksander

rootブロック内でlocationディレクティブを使用しないでください。

これを試して:

location /develop/auth {
    alias C:/webapps/develop/mil_catele_auth/public;
    try_files $uri $uri/ /index.php$is_args$args;
}

この構成では、URLは次のように機能します。

http://example.com/develop/auth/image.png-> C:/webapps/develop/mil_catele_auth/public/image.png

rootの代わりにaliasを使用すると、次のようになります。

C:/webapps/develop/mil_catele_auth/public/develop/auth/image.png代わりに。

そして、いくつかの存在しないファイル/ディレクトリの場合:

http://example.com/develop/auth/not-existing-> C:/webapps/develop/mil_catele_auth/public/index.phpが実行されます。

これがあなたが望むように機能することを願っています。

1
Tero Kilkanen