13

過去に、私は自分のウェブサイトの開発にapache+mod_php +xdebug+netbeans を使用しました (サーバーは私のローカル マシンで、Debian Squeeze を実行しています)。xdebug は期待どおりに機能し、デバッグ セッションはいつでも開始および停止できました。必要なときに。しかし、nginx+php_fpm +xdebug+netbeans に移行したとき、デバッグでいくつかの問題が発生しました。

  1. デバッグ セッションが非常に長くなる可能性があり(30 秒をはるかに超える)、nginx がそれほど長く待機できなかったようで、「504 ゲートウェイ タイムアウト エラー」が表示されます。これを解決するために多くの推奨事項を試しましたが、うまくいきません。とはいえ、デバッグセッション自体は実行され続けているため、私にとってはそれほど重要ではなく、少し不快なことです。
  2. 私のデバッグ セッションは 1 回しか実行できなかったので、それを停止して再度デバッグを開始しようとすると、netbeans は xdebug からの接続を受け入れることができませんでした (「xdebug 接続を待機しています」と書かれ、永遠に続きます)。netbeans の再起動後、デバッグ セッションを正常に再開できました。
  3. 場合によっては、私が理解できなかったのですが、デバッグは「すべての php スクリプトに対してオン」になっており、他のスクリプトの実行を妨げています。たとえば、Web サイトのhttp://mysite.local/index.phpでデバッグ セッションを開始し、それを操作します。しばらくすると、管理者 (intranet.local/adminer.php に配置) が実行されず、ブラウザがしばらくの間ページを読み込もうとし、「504 ゲートウェイ タイムアウト エラー」が表示されることに気付きました。この動作が見られた場合、netbeans で xdebug デバッグ セッションを停止するだけで、他のすべてのスクリプトが正常に動作し始めます。

さて、この質問を書いているときにいくつかの調査を行ったところ、デバッグセッションを数秒間開始した後、停止してから再度開始すると、正常に開始されることがわかりました。アクティブなデバッグをしばらく行った後に問題が発生したようです。

私のシステムとアプリ: Debian squeeze:2.6.32-5-686 Nginx: 1.4.1 (dotdeb リポジトリから) php5-fpm: 5.3.26-1~d (dotdeb リポジトリから) php5-xdebug: 5.3.26-1 ~d (dotdeb リポジトリから) netbeans: 7.3

私の設定:

  1. nginx 基本設定: https://gist.github.com/MihanEntalpo/6229801
  2. nginx ウェブサイト構成ファイル: https://gist.github.com/MihanEntalpo/6229781
  3. fastcgi_params ファイル: https://gist.github.com/MihanEntalpo/d93fd4105573e1eda56f
  4. php-fpm プール構成ファイル: https://gist.github.com/MihanEntalpo/6229820
  5. php-fpm xdebug 構成ファイル: https://gist.github.com/MihanEntalpo/6229836
  6. netbeans: オプション、これは apache サーバーとまったく同じでした:
    • 最初の行で改行 = オフ
    • ポップアップ ウィンドウでの評価 = オン
    • 要求元 URL を表示 = オン
    • ポート = 9000

nginx のエラー ログ ファイルに記録します。スクリプトがデバッグされるのを待つことができない場合、または前述の問題 #3 によってロックされた他のスクリプトが待機できない場合:

2013/08/14 14:40:16 [エラー] 4822#0: *111 アップストリーム タイムアウト (110: 接続タイムアウト) アップストリームからの応答ヘッダーの読み取り中に、クライアント: 192.168.100.1、サーバー: intranet.local、要求: "GET /adminer.php?username=root&db=devel&table=user HTTP/1.1", アップストリーム: "fastcgi://127.0.0.1:9999", ホスト: "intranet.local", リファラー: " https://intranet. local/adminer.php?username=root&db=devel "

php-fpm のログにはエラー メッセージが含まれていません...

私は自分の問題で誰かの邪魔をするのが好きではなく、常に自分で解決しようとしています。しかし、この場合、私は運が悪いために数ヶ月間これと戦っています...誰かがこの問題に直面した場合、またはnginx + php-fpm + xdebug + netbeansで使用するための作業構成がある場合-私を助けてください:)

4

3 に答える 3

21

私の問題の方向性を考えようとした皆さん、ありがとう。無事解決いたしました。

  1. 最初の問題 (504 エラー) は、nginx オプションfastcgi_read_timeoutで解決できます。たとえば、fastcgi_read_timeout 600;nginx に 600 秒待機するように指示することができます。ホストの構成ファイル、または /etc/nginx/fastcgi_params (Debian の場合) に配置する必要があります。
  2. xdebug.remote_autostart=1;2番目の問題は、xdebug.conf: のオプションが原因でしたxdebug.remote_autostart=0;。このオプションの本当の意味はわかりませんが、次のことを行います: 任意の php スクリプトがデバッガー (私の場合は netbeans) に自動的に接続しようとします。そのため、場合によっては、netbeans が接続を失い、「デバッグの開始」を押すと、新しい接続を開く必要があることを認識せず、xdebug クライアントを永遠に待機します。前述のオプションを使用すると、必要なときにいつでもデバッグを開始および停止できます。
  3. 3 番目の問題には、2 番目の問題と同じ原因がありました。私のサーバーで実行されている他のすべてのスクリプトは、netbeans に接続しようとしましたが、接続が失われたため意味がありませんでした。

とにかく、これが同様の問題を解決したい人の助けになることを願っています。StackOverflow は、自分の問題を明確に説明するよう強制することで私を助けてくれました。このプロセスで、何を試すべきかについて新しいアイデアを得ることができました。

于 2013-08-15T07:07:51.210 に答える
2

fastcgi_read_timeout を更新するときに、サーバー上のすべてのサイト (私の場合は vagrant homestead VM) の時間制限を増やすことができます。VM に SSH 接続したら、次の操作を実行できます。

sudo pico /etc/nginx/nginx.conf

そして追加

fastcgi_read_timeout 300;

httpセクションに。

于 2016-03-18T19:33:17.570 に答える