Timeout proxy con ReWriteRule

Nov 16 2020

Non c'è modo di controllare il timeout durante il proxy tramite ReWriteRule (mod_rewrite) con Apache 2.4.

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

Ho provato senza successo:

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

Il timeout è sempre di 1 minuto, indipendentemente dalle direttive precedenti che utilizzo.

Risposte

4 ximaera Nov 19 2020 at 12:52

Questo timeout può essere controllato solo a livello globale . Modifica l' Timeoutimpostazione globale nel httpd.conftuo valore preferito:

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

Probabilmente un modo migliore per farlo sarebbe usare 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;
    }
}

Collegamenti aggiuntivi alla documentazione di nginx in modo da capire cosa sta succedendo in questo frammento:

  • location e come funzionano le espressioni regolari in nginx
  • proxy_pass
  • proxy_read_timeout
  • Conversione di regole di riscrittura da Apache a Nginx

Per la configurazione SSL mancante nel mio frammento, leggi anche la documentazione .