2 votes

Le reverse proxy d'Apache provoque un délai d'environ 40 secondes lors du premier accès après une période d'inactivité.

J'ai une configuration simple de proxy inverse Apache 2.2 sur OSX avec trois hôtes virtuels qui fournissent tous une authentification SSL et Open Directory avant de tout transmettre à leurs serveurs dorsaux respectifs.

Pour chacun des trois hôtes virtuels, les choses fonctionnent bien et semblent assez rapides, mais si l'un d'entre eux est inactif pendant plus de 10 minutes environ (je n'ai pas de timing précis), à partir d'un hôte donné, le premier appel prend presque une minute, puis les appels suivants sont < 1s. Ce délai est certainement au niveau du proxy, je ne vois aucun trafic sur le serveur dorsal jusqu'à la dernière seconde de l'attente.

Qu'est-ce que je pourrais faire de mal ici ? Qu'est-ce qui peut provoquer un tel délai pour un proxy inverse ? Est-ce qu'il rafraîchit un cache ? Comment dois-je procéder pour le déboguer ?

Mes hôtes virtuels se ressemblent tous et le reste de la configuration d'Apache est très simple, avec seulement les modules dont j'ai besoin et une configuration très basique...

ServerRoot "/usr"
User _www
Group _www
DefaultType text/html

Listen 80
Listen 443
Listen 6660

DocumentRoot /Volumes/data/httpd

# Basic Requirements for a proxy
LoadModule mime_module libexec/apache2/mod_mime.so
LoadModule log_config_module libexec/apache2/mod_log_config.so
LoadModule env_module libexec/apache2/mod_env.so
LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so

# Needed for OD Authentication
LoadModule apple_auth_module libexec/apache2/mod_auth_apple.so

# Needed for SSL (duh)
LoadModule ssl_module libexec/apache2/mod_ssl.so

ErrorLog /var/log/apache2/error_log
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog /var/log/apache2/access_log common

<IfModule mod_ssl.c>
    SSLSessionCache shmcb:/var/run/ssl_scache(512000)
    SSLSessionCacheTimeout 300
    SSLMutex file:/var/log/apache2/ssl_mutex
    SSLRandomSeed startup builtin
    SSLRandomSeed connect builtin
    AddType application/x-x509-ca-cert crt
    AddType application/x-pkcs7-crl crl
</IfModule>

NameVirtualHost *:80
NameVirtualHost *:443
NameVirtualHost *:6660

<VirtualHost *:443>
ServerName mysite.server.com

SSLEngine On
SSLProxyEngine On
SSLCipherSuite "ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM"
SSLProtocol -ALL +SSLv3 +TLSv1
SSLProxyProtocol -ALL +SSLv3 +TLSv1
SSLCertificateFile "/etc/certificates/mysite.crt"
SSLCertificateKeyFile "/etc/certificates/mysite.key"

<Location />
    Order deny,allow
    Deny from all
    AuthType Basic
    Require group <my access group>
    Allow from <my test ip>

    Satisfy Any
    AuthName "MyGroup"
</Location>

SetEnv proxy-chain-auth On
ProxyPreserveHost On
ProxyPass / http://backend.mysite.com/ retry=0 keepalive=On
ProxyPassReverse / http://backend.mysite.com/
</VirtualHost>

0 votes

Autre information, si je lance une autre requête dans la foulée, la seconde s'achève en une seconde tandis que la première continue d'attendre.

1voto

Michael Hampton Points 232226

Il est probable que vous ayez des problèmes de résolution DNS avec backend.mysite.com quel que soit le nom d'hôte réel. La résolution DNS prend beaucoup de temps, mais une fois qu'elle est réussie, elle est mise en cache pendant quelques minutes. Une fois que le cache a expiré, vous êtes de retour à la case départ et l'attente recommence.

Pour résoudre le problème, corrigez le serveur DNS à l'origine du problème ou utilisez une adresse IP au lieu du nom d'hôte.

0 votes

Mon i peut accéder directement au serveur backend sans délai. Il s'agit de DNS internes et j'ai les mêmes problèmes avec les trois hôtes virtuels. Je vais essayer d'accéder directement à l'IP et voir, mais je ne suis pas sûr que ce soit le problème.

0 votes

Pour contourner la résolution de noms, utilisez hosts la résolution du fichier. Mais cela peut aussi être dû à la configuration d'Apache, s'il est configuré en tant que travailleur. Essayez de passer à prefork.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X