Nginx + php-fpm: Bad gateway only when xdebug serv

2019-07-10 00:30发布

Problem

When xdebug server is running from IntelliJ IDEA, I get 502 Bad Gateway from nginx when I try loading my site to trigger breakpoints.

If I stop the xdebug server, the site works as intended.

So, I'm not able to run the debugger, but it did work previously (!). Not able to pinpoint why it suddenly stopped working.

Setup

A short explanation of the setup (let me know if I need to expand on this).

My php app is running in a docker container, and it is linked to nginx running in a different container using volumes_fromin the docker compose config.

After starting the app, I can verify using phpinfo(); the xdebug module is loaded.

My xdebug.ini has the following content:

zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=10.0.2.2
xdebug.remote_connect_back=0
xdebug.remote_port=5555
xdebug.idekey=complex
xdebug.remote_handler=dbgp
xdebug.remote_log=/var/log/xdebug.log
xdebug.remote_autostart=1

I got the ip address for remote_host (where the xdebug server is running) by these steps:

docker-machine ssh default
route -n | awk '/UG[ \t]/{print $2}' <-- Returns 10.0.2.2

To verify I could reach the debugging server from within my php container, I did the following steps

docker exec -it randomhash bash
nc -z -v 10.0.2.2 5555

Giving the following output depending on xdebug server running or not:

  • Running: Connection to 10.0.2.2 5555 port [tcp/*] succeeded!
  • Not running: nc: connect to 10.0.2.2 port 5555 (tcp) failed: Connection refused

So IntelliJ IDEA is surely set up to receive connections on 5555. I also did the appropriate path mapping between my source file paths and the remote path (when setting up the PHP Remote Debugging server from within IDEA).

Any ideas? Kind of lost on this one as I don't have much experience with any of these technologies :D

1条回答
爷、活的狠高调
2楼-- · 2019-07-10 00:37

This sometimes happens, the reason is the errors in php-fpm and xdebug (exactly)! When I refactored my colleagues code, оne page on the project returned 502 Bad Gateway
Here's what I found:

php-fpm.log
WARNING: [pool www] child 158 said into stderr: "*** Error in `php-fpm: pool www': free(): invalid size: 0x00007f1351b7d2a0 ***" ........ ........ WARNING: [pool www] child 158 exited on signal 6 (SIGABRT - core dumped) after 38.407847 seconds from start

I found a piece of code that caused the error:

ob_start();
$result = eval("?>".$string."<"."?p"."hp return 1;");
$new_string = ob_get_clean();

But that is not all. The error occurred only in a certain state $string which at first glance, did not differ from the others. In my case, everything is simple. I removed the code that caused the error. This did not affect the functionality of the web page. I continued to debug the code further.

查看更多
登录 后发表回答