O problema pode ser um bug no httpd. Corrigido em 2.2.18.
Eu tenho um proxy Apache para um aplicativo Java personalizado que retorna o código de status 460 em uma condição de erro específica. Quando isso alcança o cliente, o apache está incorretamente transformando-o em um código de status 500, embora outros (404, 403) sejam enviados corretamente.
Aqui está meu host virtual:
<VirtualHost *:80>
ServerName api.acme.org
ProxyPass / http://service.internal:10001/
ProxyPassReverse / http://service.internal:10001/
</VirtualHost>
E a entrada de log, que mostra o código correto:
10.0.0.2 - - [21/Nov/2010:23:20:17 +0000] "GET /session/abc123/touch HTTP/1.1" 460 1379
Alguma ideia do que está causando isso?
Atualização: aqui está a saída para os cabeçalhos do curl:
Direto ao serviço:
# curl -I http://service.internal:10001/session/abc123/touch
HTTP/1.1 460
Content-length: 1388
Proxied:
# curl -O http://api.acme.org/session/abc123/touch
HTTP/1.1 500 Internal Server Error
Date: Mon, 22 Nov 2010 17:24:51 GMT
Content-length: 1388
Connection: close
Content-Type: text/plain; charset=UTF-8
Parece que o Apache tem sua própria ideia sobre qual erro deve ser!
O problema pode ser um bug no httpd. Corrigido em 2.2.18.
Pelo contrário, parece que o Apache está retornando o código de erro correto. O log mostra o Apache retornando 460, mas seu navegador pode estar interpretando de forma diferente (porque 460 não está definido em um RFC). Há uma maneira fácil de verificar isso; de uma máquina Linux (pode até ser o próprio servidor), tente executar o seguinte:
curl -I http://service.internal:10001/session/abc123/touch
Se isso estiver retornando 460, do que parece ser algo relacionado aos navegadores (isto é, um código de status desconhecido significa um erro no servidor). Se não, você pode querer considerar tentar isso SEM usar mod_proxy - ou seja, acessando a URL diretamente.
O mod_proxy não sabe o que o status 460 significa e não sabe como reagir.
Por outro lado, quando vê o status 200, ele encaminha. Quando se vê 403, 404 e alguns outros, ele sabe o que fazer.
Tags proxy apache-2.2