Apache es más lento en otras computadoras en la red de área local que en localhost

Apache es más lento en otras computadoras en la red de área local que en localhost

Tengo pocas computadoras conectadas a la red. Hay un servidor dentro de esa red que aloja WAMP (Windows + Apache + PHP + MySQL). Tiene instalado Windows 7 x32 Pro. Puedo hacer ping a ese servidor desde mi servidor conectado de forma inalámbrica, todos los pings son de 1 ms. Lo que es interesante es que cuando navego por mi aplicación web en el servidor, se carga en un abrir y cerrar de ojos. Puedo navegar por subpáginas como si fueran imágenes que simplemente estoy cambiando.

Sin embargo, en otras computadoras funciona más lento. No es trágico, pero sí notablemente más lento. En algunos casos, el navegador muestra "Esperando...", lo que tarda uno o dos segundos, y esto es lo más doloroso.

Descubrí que es mucho más rápido usar la aplicación en el servidor mientras estoy conectado a través de un escritorio remoto que en cualquier otra computadora. Sería fantástico si pudiera conseguir el mismo efecto en ellos.

Cuando miro la consola de desarrollador en Chrome, puedo ver que: DOMContentLoaded es como 400-600 ms en el servidor y 1400 ms en todas las demás computadoras.

¿Qué puedo hacer en esa situación?

Respuesta1

Asegúrese de que HostnameLookups esté configurado Offen Apache.

Dice que el servidor ejecuta Apache a través de una configuración WAMP (equivalente a LAMP en Windows), ¿correcto? Bueno, si ese es el caso, abre httpd.confo apache2.conf(todo depende de cómo se instaló en tu configuración; ambos archivos son básicamente iguales) y busca una línea de configuración en HostnameLookupsél. De forma predeterminada, HostnameLookupsestá configurado Offcomo se explica en el comentario que debería estar justo encima de la HostnameLookupsconfiguración en ese archivo; El énfasis en negrita es mío:

Búsquedas de nombres de host: registre los nombres de los clientes o solo sus direcciones IP, por ejemplo, www.apache.org (activado) o 204.62.129.132 (desactivado).El valor predeterminado está desactivado porque en general sería mejor para la red si las personas tuvieran que activar esta función conscientemente, ya que habilitarla significa que cada solicitud de cliente resultará en AL MENOS una solicitud de búsqueda en el servidor de nombres.

Y eldocumentación oficial de apachetambién entra en detalles más profundos; Nuevamente el énfasis en negrita es mío:

El valor predeterminado es Desactivado para guardar el tráfico de red para aquellos sitios que realmente no necesitan realizar búsquedas inversas.También es mejor para los usuarios finales porque no tienen que sufrir la latencia adicional que implica una búsqueda.Los sitios muy cargados deben dejar esta directiva desactivada, ya que las búsquedas de DNS pueden llevar mucho tiempo.

No utilice nombres de host para directivas Allow from/ .Deny from

Además, ¿tiene algún directorio o directiva que utilice Apache Basic Auth? ¿Cuál es la protección con contraseña simple que se puede configurar en Apache? Recuerdo que en algunos casos hubo ralentizaciones relacionadas con las búsquedas de nombres de host conectadas a Allow fromcampos como un archivo Allow from localhost. Comentar Allow from localhosto configurar eso Allow from 127.0.0.1 ::1y luego reiniciar Apache lo aclararía.

Como se explica enla documentación oficial de Apacheincluso con HostnameLookupsla configuración para Offusar nombres de host completos en las directivas Allow from/ Deny fromse activará toda una cadena de búsquedas de DNS que pueden ralentizar el acceso; El énfasis en negrita es mío:

Los hosts cuyos nombres coinciden o terminan en esta cadena tienen acceso permitido. Solo se coinciden los componentes completos, por lo que el ejemplo anterior coincidirá con foo.apache.org pero no con fooapache.org.Esta configuración hará que Apache realice una doble búsqueda DNS inversa en la dirección IP del cliente, independientemente de la configuración de la directiva HostnameLookups. Realizará una búsqueda DNS inversa en la dirección IP para encontrar el nombre de host asociado y luego realizará una búsqueda directa en el nombre de host para asegurarse de que coincida con la dirección IP original. Solo se permitirá el acceso si el DNS directo e inverso son consistentes y las coincidencias de nombres de host.

EsteLa publicación del blog también lo explica muy bien.Si desea leer más detalles sobre cómo las entradas Allow from/ Deny fromque tienen un nombre de host (en lugar de una dirección IP sin formato) pueden ralentizar el acceso de Apache debido a múltiples búsquedas de DNS:

Sin embargo, recientemente me encontré con una situación en la que, sin darnos cuenta, estábamos haciendo el equivalente sin habilitar explícitamente HostnameLookups. ¿Cómo? ¡Limitando el acceso según el nombre de host remoto! Lea la documentación sobre la directiva Allow, en la sección "Un nombre de dominio (parcial)":

Esta configuración hará que Apache realice una doble búsqueda DNS inversa en la dirección IP del cliente, independientemente de la configuración de la directiva HostnameLookups. Realizará una búsqueda DNS inversa en la dirección IP para encontrar el nombre de host asociado y luego realizará una búsqueda directa en el nombre de host para asegurarse de que coincida con la dirección IP original. Solo se permitirá el acceso si el DNS directo e inverso son consistentes y las coincidencias de nombres de host. Esto tiene mucho sentido, pero es un efecto secundario inesperado bastante grande al usar algo como:

Allow from .example.com

En nuestro caso, fue un caso aún menos obvio que no nos hizo pensar en nombres de host en absoluto:

Allow from localhost

Aquí se escribió localhost, tal vez para ahorrar algo de esfuerzo o tal vez aumentar la claridad en lugar de escribir 127.0.0.1 (IPv4) y ::1 (IPv6). Mentalmente, es tan fácil ver que "localhost" es un alias directo para 127.0.0.1 y ::1 que podemos olvidar que el nombre "localhost" es sólo una convención y requiere una búsqueda como cualquier otro nombre. Aquellos que estén familiarizados con la base de datos MySQL pueden saber que en realidad asigna un significado especial y confuso a la palabra "localhost" para realizar una conexión de socket UNIX en lugar de una conexión TCP a 127.0.0.1 o cualquier "localhost" definido en el sistema.

También puede estar pensando que buscar 127.0.0.1 es rápido porque generalmente está asignado a "localhost" en /etc/hosts. Es cierto, pero todos los demás visitantes que no están en /etc/hosts obtienen la búsqueda lenta de DNS PTR. Y dependiendo del sistema operativo, es posible que vea "ip6-localhost" o "ip6-loopback" (Debian 7, Ubuntu 12.04), "localhost6" (RHEL 5/6, Fedora 19) en /etc/hosts, o algo más. . Por eso es importante detallar las direcciones:

Allow from 127.0.0.1
Allow from ::1

Al hacerlo, se detiene inmediatamente el comportamiento implícito de HostnameLookups y se acelera el sitio web. En este caso no fue un problema, ya que era para un sitio web privado e interno que no podía ser visitado por nadie que no tuviera permiso primero a través de un firewall, por lo que los niveles de tráfico eran relativamente bajos. Ese control de acceso es parte de la razón por la que se necesitaba permitir localhost en primer lugar. Pero habría sido muy malo en un sistema de producción público debido a la desaceleración en el tráfico de servicio.

información relacionada