Nginx + PHP-fpm + ioncube = Błąd 502 Bad Gateway

Otrzymałem ostatnio zadanie instalacji modułu na jednym z serwerów, moduł był zaszyfrowany ioncube’m, niby prosta sprawa, ale jak zwykle nie obyło się bez problemów.

Problem występował na różnych środowiskach, jednakowo przy php 7.1 oraz 7.3. Inn kod, który również był szyfrowany przy pomocy ioncube działał bez zarzutu.

Stack to:

  • Ubuntu – 20.04.1
  • NGINX – 1.18.0
  • PHP – 7.1.33-44
  • Xdebug – 2.9.8 (to ważne)

Objawy pacjenta

Log php (/var/log/nginx/error.log):

... [error] 178375#178375: *1 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: ...

Log Nginx (/var/log/php7.1-fpm.log):

WARNING: [pool www] child 180458 exited on signal 11 (SIGSEGV) after 10.588284 seconds from start

Dopiero dmesg rozjaśnił nieco sytuację:

...
[52374.447558] php-fpm7.1[178367]: segfault at 45 ip 00007fa238e8c580 sp 00007ffd4736f880 error 4 in xdebug.so[7fa238e89000+29000]
[52374.447567] Code: a6 0f 97 c0 1c 00 84 c0 0f 84 2c 04 00 00 48 85 ed 74 27 48 8b 45 18 48 85 c0 74 1e f6 00 01 75 19 48 8b 45 00 48 85 c0 74 10 <80> 78 1c 65 0f 84 06 04 00 00 66 0f 1f 44 00 00 4c 89 cf e8 78 50
....

Diagnoza

Skrypt ioncuba przewrócił xdebug’a, ten przewrócił FPM’a, ten z kolei nic nie zwrócił do Nginx’a co spowodowało w/w błąd bez żadnego sensownego komunikatu w logach.

Rozwiązanie (tymczasowe)

sudo apt-get remove php7.1-xdebug
sudo service nginx restart
sudo service php7.1-fpm restart 

Gdyby komuś udało się znaleźć permanentne rozwiązanie, lepsze niż wywalenie xdebug’a to będę wdzięczny za komentarz 🙂

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.