97 votes

Proxy Error 502 "Reason : Error reading from remote server" avec Apache 2.2.3 (Debian) mod_proxy et Jetty 6.1.18

Apache reçoit les demandes sur le port :80 et les transmet à Jetty sur le port :8080.

The proxy server received an invalid response from an upstream server
The proxy server could not handle the request GET /.

Mon dilemme : Tout fonctionne bien normalement (les demandes rapides, quelques secondes ou quelques dizaines de secondes les demandes longues sont traitées ok ). Problèmes se produire lorsque le traitement d'une demande prend du temps (quelques minutes ?).

Si j'émets une demande à la place directement à Jetty au port :8080 la demande est traitée OK. Le problème est donc probablement pour se situer quelque part entre Apache et Jetty où j'utilise mod_proxy . Comment résoudre ce problème ?

J'ai déjà essayé quelques "trucs" liés aux paramètres de KeepAlive, sans succès. Voici ma configuration actuelle, des suggestions ?

#keepalive Off                     ## I have tried this, does not help
#SetEnv force-proxy-request-1.0 1  ## I have tried this, does not help
#SetEnv proxy-nokeepalive 1        ## I have tried this, does not help
#SetEnv proxy-initial-not-pooled 1 ## I have tried this, does not help
KeepAlive 20                       ## I have tried this, does not help
KeepAliveTimeout 600               ## I have tried this, does not help
ProxyTimeout 600                   ## I have tried this, does not help

NameVirtualHost *:80
<VirtualHost _default_:80>
    ServerAdmin webmaster@mydomain.fi

    ServerName www.mydomain.fi

    ServerAlias mydomain.fi mydomain.com mydomain www.mydomain.com

    ProxyRequests On
    ProxyVia On
    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    ProxyRequests Off
    ProxyPass / http://www.mydomain.fi:8080/ retry=1 acquire=3000 timeout=600
    ProxyPassReverse / http://www.mydomain.fi:8080/

    RewriteEngine On
    RewriteCond %{SERVER_NAME} !^www\.mydomain\.fi
    RewriteRule /(.*) http://www.mydomain.fi/$1 [redirect=301L]

    ErrorLog /var/log/apache2/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined
    ServerSignature On

</VirtualHost>

Voici également le journal de débogage d'une requête qui a échoué :

74.125.43.99 - - [29/Sep/2010:20:15:40 +0300] "GET /?wicket:bookmarkablePage=newWindow:com.mydomain.view.application.reports.SaveReportPage HTTP/1.1" 502 355 "https://www.mydomain.fi/?wicket:interface=:0:2:::" "Mozilla/5.0 (Windows; U; Windows NT 6.1; fi; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10"
[Wed Sep 29 20:20:40 2010] [error] [client 74.125.43.99] proxy: error reading status line from remote server www.mydomain.fi, referer: https://www.mydomain.fi/?wicket:interface=:0:2:::
[Wed Sep 29 20:20:40 2010] [error] [client 74.125.43.99] proxy: Error reading from remote server returned by /, referer: https://www.mydomain.fi/?wicket:interface=:0:2:::

-1voto

CommaToast Points 147

Si les solutions ci-dessus ne fonctionnent pas, vous pouvez essayer d'activer tous vos modules Apache pour vous assurer qu'aucun module dont vous avez besoin n'a été accidentellement désactivé.

Par exemple, la façon dont j'ai trouvé la cause de mon problème a été de remplacer toutes les instances de #LoadModule par LoadModule dans tous mes fichiers de configuration Apache. Comme cela a résolu le problème pour moi, je savais donc que mon problème n'était pas un argument manquant de la directive "KeepAlive", mais plutôt une dépendance manquante.

Car, rappelez-vous, les fichiers .so sont essentiellement des bibliothèques statiques. Le fait qu'un module soit activé ne signifie pas qu'il sera utilisé, mais le fait qu'il soit désactivé signifie qu'il ne pourra pas être utilisé et que, par conséquent, tout ce qui en dépend échouera nécessairement.

Note : cette réponse a reçu quelques votes négatifs en raison du fait que ma réponse initiale semblait suggérer de laisser tous les modules activés, pour toujours. Bien que vous puissiez théoriquement le faire sans nécessairement casser quoi que ce soit, ce n'est évidemment pas la meilleure solution.

Donc, comprenez bien que je ne fais que suggérer ceci comme une étape de dépannage, pas comme une solution finale.

Veuillez également noter que j'utilise un projet git spécial pour suivre tous les fichiers de configuration apache de ma machine locale. De cette façon, je peux effectuer ce genre d'opérations de recherche et de remplacement dans mon répertoire de travail de la configuration d'apache, comme une étape de dépannage. Si l'activation de tous les modules réussit, essayez de les désactiver à nouveau un par un et de redémarrer apache entre-temps, jusqu'à ce que vous trouviez le module qui doit rester activé. Une fois que vous avez trouvé, réinitialisez le dépôt à son état d'origine, et activez uniquement le module qui doit rester activé.

Vous constaterez également que l'utilisation de git pour le suivi de vos fichiers de configuration apache permet de nettoyer ces répertoires, puisque vous n'aurez plus besoin de ces vieux fichiers .bak et .default.

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