web-dev-qa-db-ja.com

nginxでxdebugを有効にする方法は?

私の状況は次のとおりです。

VM(Ubuntu server 13.04)with PHP 5.4.9-4ubuntu2.2、nginx/1.2.6、php5-fpm and Xdebugv2。 2.1。

PhpStorm 6.0.3(VMにデプロイ)を使用してアプリを開発しています。

私の問題は、デバッグセッションを開始しようとすると、IDEがWebサーバーから接続要求を取得しない(したがって、セッションが開始されない)ことです。

Xdebugの構成に関する多くの推奨事項を調べましたが、何も役に立ちませんでした。

最近気付いたのは、ブラウザからXDEBUG_SESSION Cookieを自分で設定すると(FireCookieに感謝)、アプリをデバッグできるということです。したがって、WebサーバーがCookieをクライアントに返送するのを妨げる何かがあると思います。

問題は、同じIDE構成を別のプロジェクトで使用しており、これは別のCentOSベースのVM(lighttpdを使用)にデプロイされていることです。それはうまく機能します。

現在のプロジェクトをそのようなVM(WebサーバーをNginXに変更)にデプロイしようとしましたが、問題なく動作しました(残念ながら、VMを失い、確認できません)構成:()。

だから...これが私のNginX設定です:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name localhost;

    location / {
        try_files $uri $uri/ /dispatch.php;
    }

    #
    location ~ \.php$ {
        root /var/www/bresson/web;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index  dispatch.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/$fastcgi_script_name;
        include fastcgi_params;
        #fastcgi_pass   127.0.0.1:9009;
    }

}

fpm config(/etc/php5/fpm/pool.d/www.conf):

listen = /var/run/php5-fpm.sock

xdebug.ini:

zend_extension=/usr/lib/php5/20100525/xdebug.so
xdebug.remote_port=9000
xdebug.remote_enable=On
xdebug.remote_connect_back=On
xdebug.remote_log=/var/log/xdebug.log

どんなアイデアでも大歓迎です。ありがとう!

編集:

私が試したもう1つのことは、phpからセッションを開始することでしたが、セッションCookieが問題なく作成されていることがわかりました...

2回目の編集:

問題がどこにあるかを見つけたと思います:URI。

構成パラメーターなどを試すために別のスクリプト(はるかに単純なもの)を作成しましたが、すぐに機能しました。

そのため、最終的には、クエリパラメータ(つまり、XDEBUG_SESSION_START=14845)がスクリプトに到達していないことが問題であることがわかりました。

問題は、/images/P/P1/P1010044-242x300.jpgの形式の開始URIです。いくつかの仮想ホスト構成を介して、それを/dispatch.php/images/P/P1/P1010044-242x300.jpgのようなものにルーティングし、残りのURIをパラメーターとして使用できるはずです。だから...私はそれ自体で解決策を見つけていませんが、今は実行可能な回避策(開始URLを/dispatch.phpに向ける)があり、しばらくの間それを実行します。ありがとう

13
Muc

誰かがこれを読んでいる場合に備えて...私はそれを手に入れました!

問題はnginxの構成でした。どこかからテンプレートをコピーしたばかりでしたが、もう少し読んで、特定の構成がはるかに単純であることがわかりました。

location / {
        root /var/www/bresson/web/;
        include fastcgi_params;     
        fastcgi_param SCRIPT_FILENAME $document_root/dispatch.php;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

私の場合、すべてのリクエストをフロントコントローラーに転送する必要があるため(URIを分析します)、非常に簡単でした。

8
Muc