Thời gian chờ proxy với ReWriteRule

Nov 16 2020

Không có cách nào kiểm soát thời gian chờ khi proxy bằng ReWriteRule (mod_rewrite) với Apache 2.4.

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

Tôi đã thử không thành công:

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

Thời gian chờ luôn là 1 phút, bất kể tôi sử dụng lệnh nào ở trên.

Trả lời

4 ximaera Nov 19 2020 at 12:52

Thời gian chờ này chỉ có thể được kiểm soát trên toàn cầu . Thay đổi Timeoutcài đặt chung thành httpd.confgiá trị ưa thích của bạn:

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

Có lẽ một cách tốt hơn để làm điều này là sử dụng 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;
    }
}

Các liên kết bổ sung đến tài liệu nginx để bạn hiểu điều gì đang xảy ra trong đoạn mã này:

  • location và cách biểu thức chính quy hoạt động trong nginx
  • proxy_pass
  • proxy_read_timeout
  • Chuyển đổi quy tắc viết lại từ Apache sang Nginx

Đối với cấu hình SSL bị thiếu trong đoạn mã của tôi, vui lòng đọc tài liệu .