Aprende cómo evitar el error net::ERR_CONNECTION_RESET en el navegador al acceder a la ruta predeterminada de un nuevo proyecto de Symfony 6 usando XAMPP en Windows.

Cómo evitar que los proyectos de Symfony 6 arrojen el error net::ERR_CONNECTION_RESET en el navegador usando XAMPP con PHP 8

He estado usando XAMPP para proyectos simples desde que aprendí a desarrollar software en la web con PHP. Symfony también fue mi primera opción de marco de trabajo para PHP, ya que comencé a trabajar con él desde la versión 1.4 (ha pasado mucho tiempo considerando que la última versión hasta la fecha es Symfony 6). Un problema común con esta práctica es que cuando trabajas con módulos especiales como Imagick, GD u otras cosas que deben instalarse en la distribución de PHP, si se instaló localmente en su entorno pero desafortunadamente no se instaló en el servidor (que en lugar de ejecutar Windows, ejecuta Linux), su código fallará (causando la reacción del meme "funciona en mi máquina").

Excluyendo el problema mencionado, sigo usando XAMPP para ejecutar mis proyectos de Symfony localmente en Windows y funcionan bastante bien, a excepción de los nuevos proyectos de Symfony 6. Probablemente te enfrentes al mismo problema al intentar configurar un VirtualHost y ejecutar un nuevo proyecto Symfony 6 vacío y XAMPP con PHP 8.0.12.

Eso es todo lo que obtienes en el navegador cuando intenta conectarse, un vago mensaje de error del navegador de net::ERR_CONNECTION_RESET. Al principio pensé que tal vez mi VirtualHost estaba mal configurado, pero todos los demás proyectos PHP funcionaron bastante bien (incluidos los proyectos Symfony <= 5), así que busqué una solución a este problema sin éxito. Al final, pude ejecutar el proyecto utilizando el servidor incorporado de Symfony:

symfony serve

Esta puede ser una posible solución para usted en algunos casos (fue la solución para mí hasta ahora), sin embargo, si insistes en usar xampp para que el proyecto funcione, has llegado al lugar correcto para aprender cómo hacerlo.

Solución ¿...?

Skinner Xampp Symfony

Inesperadamente, hace un mes, encontré este problema #412 en Monolog Bundle para Symfony abierto por @JPustkuchen y todo apuntaba al mismo problema al que me enfrentaba. Como cualquier proyecto nuevo de Symfony 6 funciona perfectamente en producción en servidores Linux, señaló un problema con XAMPP en Windows y algo en la configuración. JPustkuchen determinó el problema en Monolog Bundle, si comentas el MonologBundle de tu archivo project/config/bundles.php:

<?php

return [
    // ... //
    // Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
    // ... //
];

Y comentas la configuración por defecto de monolog ( project/config/dev/monolog.yaml):

#
#monolog:
#    handlers:
#        main:
#            type: stream
#            path: "%kernel.logs_dir%/%kernel.environment%.log"
#            level: debug
#            channels: ["!event"]
#        # uncomment to get logging in your browser
#        # you may have to allow bigger header sizes in your Web server configuration
#        #firephp:
#        #    type: firephp
#        #    level: info
#        #chromephp:
#        #    type: chromephp
#        #    level: info
#        console:
#            type: console
#            process_psr_3_messages: false
#            channels: ["!event", "!doctrine", "!console"]

Luego, limpias el caché de tu proyecto e intentas acceder a la ruta predeterminada de un nuevo proyecto Symfony en el navegador, ¡el proyecto funcionará y obtendrás una respuesta normal en el navegador! Entonces encontramos la razón del problema, pero esta no es una solución real, ¿no? Monolog es una herramienta muy útil que no debemos eliminar de nuestros proyectos.

La verdadera solución

Específicamente, en esta pregunta de StackOverflow , David Ferenczy menciona que:

Es un problema común cuando se trabaja con expresiones regulares largas en PHP. Este problema ocurre con más frecuencia en la plataforma Windows, debido al tamaño de stack predeterminado más pequeño de Apache. Hay un tamaño de stack predeterminado de 1 MB en Windows, a diferencia de 8 MB en las plataformas Unix/Linux. Podría ser una razón por la cual, por ejemplo, algunos scripts PHP funcionan correctamente en Linux, pero provocan el bloqueo de Apache en Windows. La mejor manera de modificar el tamaño de la pila de Apache es usar la directiva ThreadStackSize en el archivo de configuración de Apache. Hay una descripción de la directiva ThreadStackSize en la documentación de Apache".

Entonces, al final, no fue culpa de Symfony o Monolog, sino un problema con Apache en Windows. Para resolver este problema, todo lo que tuve que hacer fue especificar el ThreadStackSize de apache mpm_winnt_module a 8 MB y aumentar el ThreadsPerChild de 100 a 250. Puedes modificar esos parámetros en el archivo xampp/apache/conf/extra/httpd-mpm.conf:

# xampp/apache/conf/extra/httpd-mpm.conf
# WinNT MPM
# ThreadsPerChild: constant number of worker threads in the server process
# MaxConnectionsPerChild: maximum number of connections a server process serves
<IfModule mpm_winnt_module>
    ThreadStackSize 8388608
    ThreadsPerChild        250
    MaxConnectionsPerChild   0
</IfModule>

Guarda los cambios en el archivo de configuración, reinicia apache y el proyecto ahora debería estar accesible como siempre:

Symfony 6 Default Route Success Xampp PHP 8

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores