Tempo limite do proxy com ReWriteRule

Nov 16 2020

Não há como controlar o tempo limite ao fazer proxy por meio de ReWriteRule (mod_rewrite) com Apache 2.4.

<VirtualHost "*:443">
  ServerName xxxx
  Use ssl
  RewriteEngine On
  RewriteRule (.*/wms|/openlayers3/.*) http://localhost:8080$1 [P,L]
  RewriteRule .* [F]
</VirtualHost>

Tentei sem sucesso:

  • Timeout 400
  • ProxyTimeout 400
  • ProxySet
<Proxy "http://localhost:8080/">
  ProxySet connectiontimeout=100 timeout=400
</Proxy>
  • ProxyPass "/" "http://localhost:8080" connectiontimeout=100 timeout=400

O tempo limite é sempre de 1 minuto, não importa qual das diretivas acima eu uso.

Respostas

4 ximaera Nov 19 2020 at 12:52

Esse tempo limite pode ser controlado apenas globalmente . Altere a Timeoutconfiguração global httpd.confpara o valor de sua preferência:

#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 400

Provavelmente, a melhor maneira de fazer isso seria usar o nginx:

server {
    listen       443;
    server_name  xxxx;
    # ... ssl setup ...

    location ~* /wms$ {
        proxy_pass http://localhost:8080;
        proxy_read_timeout 400;
    }

    location /openlayers3/ {
        proxy_pass http://localhost:8080;
        proxy_read_timeout 400;
    }

    location / {
        return 403;
    }
}

Links adicionais para a documentação do nginx para que você entenda o que está acontecendo neste snippet:

  • location e como as expressões regulares funcionam no nginx
  • proxy_pass
  • proxy_read_timeout
  • Converter regras de reescrita do Apache para Nginx

Para a configuração SSL ausente em meu snippet, leia também a documentação .