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:::

114voto

Martin Points 1081

J'ai résolu le problème. Le site Keepalive=On doit être inséré dans ProxyPass ligne de configuration :

ProxyPass / http://www.dom.fi:8080/ retry=1 acquire=3000 timeout=600 Keepalive=On

Voir que

Keepalive=On

là ? C'est essentiel ;)

11voto

Mark Points 221

Cette erreur peut également se produire si vous ne terminez pas l'url du proxy par un caractère / . Soit les deux chemins doivent se terminer par un / ou aucun des deux.

5voto

TCampbell Points 2004

Avez-vous essayé de régler setenv proxy-initial-not-pooled 1 ?

Référence aquí

1voto

En regardant le journal, il y a quelque chose qui s'arrête au bout de 5 minutes (=300 secondes). C'est un temps assez long pour attendre une réponse. Lorsque vous accédez directement au serveur Jetty, cette ressource met-elle vraiment autant de temps à produire une réponse ?

Si les cinq minutes sont vraiment dans les temps de réponse possibles, vous pouvez essayer de modifier la directive de configuration ProxyTimeout.

En fonction de la configuration de votre réseau, il se peut qu'il n'y ait aucune raison d'essayer d'utiliser un système keepalive (y a-t-il un pare-feu entre le serveur d'applications et le proxy qui pourrait être configuré pour abandonner les sessions qui sont inactives pendant trop longtemps), mais le ProxyTimeout affecterait le comportement du proxy lui-même.

Si le même proxy sert également d'autres backends, il est préférable de conserver le ProxyTimeout actuel et de configurer le délai dans la directive ProxyPass (voir la documentation de mod_proxy).

Si, toutefois, les réponses sans le proxy sont constamment inférieures aux cinq minutes considérées ici comme la limite, alors il pourrait y avoir une interférence étrange entre le proxy et le serveur d'application, mais vous ne fournissez rien d'utile pour identifier ce que cela pourrait être.

0voto

steven Points 1107

Pour moi, la suppression d'une valeur d'en-tête appelée Transfer-Encoding" (binary) dans mon application serveur (PHP) a résolu le problème pour :

[proxy_http:error] [pid 17623] (22)Argument invalide : [client 127.0.0.1:44929] AH01102 : erreur de lecture de la ligne d'état du serveur distant 0.0.0.0:80

Toutes les autres suggestions comme SetEnv proxy-initial-not-pooled o Keep-Alive ne l'a pas fait.

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