ReWriteRuleによるプロキシタイムアウト

Nov 16 2020

Apache 2.4でReWriteRule(mod_rewrite)を使用してプロキシする場合、タイムアウトを制御する方法はありません。

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

私は失敗しました:

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

上記のどのディレクティブを使用しても、タイムアウトは常に1分です。

回答

4 ximaera Nov 19 2020 at 12:52

このタイムアウトは、グローバルにのみ制御できます。グローバルTimeout設定httpd.confをお好みの値に変更します。

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

おそらくこれを行うためのより良い方法は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;
    }
}

このスニペットで何が起こっているのかを理解するためのnginxドキュメントへの追加リンク:

  • location 正規表現がnginxでどのように機能するか
  • proxy_pass
  • proxy_read_timeout
  • 書き換えルールをApacheからNginxに変換する

スニペットにないSSL構成については、ドキュメントもお読みください。