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 es einmal 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
in 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;
}