web-dev-qa-db-fra.com

Le serveur proxy a reçu une réponse non valide d'un serveur en amont

Nous avons une application déployée sur Tomcat. Pour accéder à l'application, nous utilisons Apache qui envoie des demandes à Tomcat. Au hasard, le navigateur donne la réponse suivante.

Proxy Error
The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /sampleapp/<http://samplehost.com:8080/sampleapp/>.
Reason: Error reading from remote server
________________________________
Apache/2.2.21 (Unix) Server at samplehost.com Port 8080

Cette erreur ne vient pas toujours et jusqu'à présent, nous l'obtenons sur une machine client avec IE uniquement. Sur la même machine client avec Firefox, cela fonctionne bien.

Voici la trace d'erreur des journaux Apache pour une demande ayant échoué

[Thu Mar 22 02:51:08 2012] [error] [client 10.36.64.137] (20014)Internal error: proxy: error reading status line from remote server localhost:8081, referer: http://samplehost.com:8080/sampleapp/opp/showSearchHome.htm
[Thu Mar 22 02:51:08 2012] [error] [client 10.36.64.137] proxy: Error reading from remote server returned by /sampleapp/opp/searchResult.htm, referer: http://samplehost.com:8080/sampleapp/opp/showSearchHome.htm

Rien ne s'imprime sur les journaux Tomcat lorsqu'une demande échoue.

Voici la version installée d'Apache relative aux informations

-bash-3.00$ ./httpd -v
Server version: Apache/2.2.21 (Unix)
Server built:   Sep 21 2011 20:00:58

Lorsque j'essaie de trouver les modules chargés, j'obtiens l'erreur suivante

-bash-3.00$ /usr/local/Apache2/bin/apachectl -t -D DUMP_MODULES
httpd: Syntax error on line 64 of /usr/local/Apache2/conf/httpd.conf: Cannot load /usr/local/Apache2/modules/mod_authnz_ldap.so into server: ld.so.1: httpd: fatal: libldap-2.4.so.2: open failed: No such file or directory
25
ckb

Cela n'est pas mentionné dans votre message, mais je soupçonne que vous établissez une connexion SSL à partir du navigateur vers Apache, où VirtualHosts sont configurés, et Apache fait un proxy revese sur votre Tomcat.

Il y a un bug sérieux dans (certaines versions?) De IE qui envoie les "mauvaises" informations d'hôte dans une connexion SSL (voir EDIT ci-dessous) et confond les Apache VirtualHosts. En bref, le nom du serveur présenté est celui de la résolution DNS inverse de l'IP, pas celui de l'URL.

La solution consiste à avoir une adresse IP par hôte virtuel SSL/nom de serveur. Est court, vous devez vous retrouver avec quelque chose comme

1 nom de serveur == 1 adresse IP == 1 certificat == 1 hôte virtuel Apache

[~ # ~] modifier [~ # ~]

Bien que la conclusion soit correcte, l'identification du problème est mieux décrite ici http://en.wikipedia.org/wiki/Server_Name_Indication

9
Bruno Grieder