Nota: Se realizaron algunas actualizaciones según la información nueva. Las ideas antiguas se agregaron como comentarios a continuación. Nota: Hizo algunas actualizaciones (nuevamente) basadas en nueva información. Las ideas antiguas se agregaron como comentarios a continuación (nuevamente).La replicación de CouchDB no funciona correctamente detrás de un proxy
Estamos ejecutando dos instancias de CouchDB en equipos separados detrás de proxies inversos Apache. Al intentar replicar entre las dos instancias:
curl -X POST http://user:[email protected]/couchdb/_replicate -d '{ "source": "db1", "target": "http://user:[email protected]/couchdb/db1" }' --header "Content-Type: application/json"
(que empezamos a usar curl para depurar el problema)
recibimos un error similar al siguiente:
{"error":"case_clause","reason":"{error,\n {{bad_return_value,\n {invalid_json,\n <<\"<!DOCTYPE HTML PUBLIC \\\"-//IETF//DTD HTML 2.0//EN\\\">\\n<html><head>\\n<title>404 Not Found</title>\\n</head><body>\\n<h1>Not Found</h1>\\n<p>The requested URL /couchdb/db1/_local/01e935dcd2193b87af34c9b449ae2e20 was not found on this server.</p>\\n<hr>\\n<address>Apache/2.2.3 (Red Hat) Server at 10.1.100.59 Port 80</address>\\n</body></html>\\n\">>}},\n {child,undefined,\"01e935dcd2193b87af34c9b449ae2e20\",\n {gen_server,start_link,\n [couch_rep,\n [\"01e935dcd2193b87af34c9b449ae2e20\",\n {[{<<\"source\">>,<<\"db1\">>},\n {<<\"target\">>,\n <<\"http://user:[email protected]/couchdb/db1\">>}]},\n {user_ctx,<<\"user\">>,\n [<<\"_admin\">>],\n <<\"{couch_httpd_auth, default_authentication_handler}\">>}],\n []]},\n temporary,1,worker,\n [couch_rep]}}}"}
así que infórmate después de un nuevo aparece que apache devuelve este error sin intentar acceder a CouchDB (de acuerdo con los archivos de registro). Para ser claros cuando se alimenta el siguiente URL
/couchdb/db1/_local/01e935dcd2193b87af34c9b449ae2e20
Apache pasa la solicitud al CouchDB y devuelve error de CouchDB 404. Por otro lado, cuando la replicación se produce en realidad la URL que se pasa es
/couchdb/db1/_local%2F01e935dcd2193b87af34c9b449ae2e20
la que determina Apache es un documento que falta y devuelve su propio error 404 sin cada vez que pasa la solicitud al CouchDB. Esto al menos me da algunas pistas nuevas, pero igual podría utilizar la ayuda si alguien tiene una respuesta inmediata.
El problema parece tener algo que ver con el HTML devuelto por el servidor remoto (sucede como una fuente o un destino). La reescritura parece ser 'automágica'. La página no coincide con el 404 presentado en los documentos de error de Apache (que no están activos de todos modos). Parece que hay propiedades similares en la biblioteca INETS basada en Erlang, pero no son exactamente iguales y mis intentos de editar las secciones apropiadas no tuvieron resultados que pudiera decir. ¿Alguna idea? – Wesley
Verifiqué los archivos de registro y, al contrario del mensaje de retorno, lo que realmente envía el sofá es "/ couchdb/db1/_local% 2F01e935dcd2193b87af34c9b449ae2e20" (barra oblicua) que da como resultado el mismo error acerca de que se devuelve HTML mientras la URL con barra inclinada devuelve el espera error JSON. Este problema no ocurre en ninguna situación sin el proxy. Esto implica que el problema está en el proxy, pero el manejo del ErrorDocument del proxy está desactivado y ninguno de los archivos enumerados coincide de todos modos. ¿Alguien tiene más sugerencias? – Wesley
En este punto, como está depurando/configurando un proxy inverso httpd de Apache, puede intentar preguntar sobre el error del servidor. Me imagino que esas personas comen proxies inversas para el desayuno. Actualicé mi respuesta para hablar sobre rutas y códigos de escape un poco. – JasonSmith