Wenn man PHP mit XDebug Extension startet bringt dies trotz der Verbesserungen von Version 3 immer noch einen gewissen Overhead mit sich, welcher sich auf jeden Request auswirkt, der an PHP-FPM gesendet wird.
Zum aktivieren von XDebug über den Browser wird üblicherweise das Cookie XDEBUG_SESSION verwendet, auf welches man in der Konfiguration prüfen und die Requests an die jeweiligen PHP-FPM Ports, Sockets oder Docker-Container umleiten kann.
Im Beispiel verwende ich zwei unterschiedliche Docker-Container. Dies ist ein mal der Container php ohne XDebug und der Container php_debug mit geladener XDebug Erweiterung.
Beispiel Caddy
Im Caddyfile werden bei einem normalen Setup alle Anfragen direkt an PHP-FPM weiterleitet:
route {
# ... your config
php_fastcgi php:9000
}
Dies wird nun ergänzt durch einen so genannten Matcher welcher prüft, ob das Cookie XDEBUG_SESSION vorhanden ist.
Somit wird daraus:
route {
# ... your config
@xdebug {
header_regexp xdebug_cookie Cookie XDEBUG_SESSION
}
php_fastcgi @xdebug php_debug:9000
php_fastcgi php:9000
}
Beispiel Nginx
Bei Nginx funktioniert das Wechsel über map und die Prüfung auf genaue Übereinstimmung auf den Wert des Cookies. Überlicherweise steht in dem Cookie der Wert PHPSTORM.
server {
# ... your config
fastcgi_pass php:9000;
}
Das Mapping kann nach belieben irgendwo in der Nginx Config eingebunden werden z.B. in /etc/nginx/conf.d/xdebug.conf und sieht folgendermaßen aus:
map $cookie_XDEBUG_SESSION $php_fastcgi_pass {
default php:9000;
PHPSTORM php_debug:9000;
}
Die Konfiguration vom vHost wird dann entsprechend angepasst:
server {
# ... your config
fastcgi_pass $php_fastcgi_pass;
}