Apache 反向代理在空闲后第一次访问时导致约 40 秒的延迟

Apache 反向代理在空闲后第一次访问时导致约 40 秒的延迟

我在 OSX 上设置了一个简单的 Apache 2.2 反向代理,其中三个虚拟主机都提供 SSL 和 Open Directory 身份验证,然后将所有内容转发到各自的后端服务器。

对于这三个虚拟主机,一切都运行良好,速度似乎也足够快,但如果其中任何一个主机空闲超过 10 分钟左右(我没有准确的时间),则第一次调用将花费近一分钟,然后后续调用将少于 1 秒。这个延迟肯定是在代理上,直到等待的最后一秒,我才看到后端服务器上有流量。

我在这里可能做错了什么?什么会导致反向代理像这样延迟?它正在刷新缓存吗?我该如何调试它?

我的虚拟主机看起来都差不多,其余的 apache 配置都是基本框架,只有我需要的模块和非常基本的设置……

ServerRoot "/usr"
User _www
Group _www
DefaultType text/html

Listen 80
Listen 443
Listen 6660

DocumentRoot /Volumes/data/httpd

# Basic Requirements for a proxy
LoadModule mime_module libexec/apache2/mod_mime.so
LoadModule log_config_module libexec/apache2/mod_log_config.so
LoadModule env_module libexec/apache2/mod_env.so
LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so

# Needed for OD Authentication
LoadModule apple_auth_module libexec/apache2/mod_auth_apple.so

# Needed for SSL (duh)
LoadModule ssl_module libexec/apache2/mod_ssl.so

ErrorLog /var/log/apache2/error_log
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog /var/log/apache2/access_log common

<IfModule mod_ssl.c>
    SSLSessionCache shmcb:/var/run/ssl_scache(512000)
    SSLSessionCacheTimeout 300
    SSLMutex file:/var/log/apache2/ssl_mutex
    SSLRandomSeed startup builtin
    SSLRandomSeed connect builtin
    AddType application/x-x509-ca-cert crt
    AddType application/x-pkcs7-crl crl
</IfModule>


NameVirtualHost *:80
NameVirtualHost *:443
NameVirtualHost *:6660


<VirtualHost *:443>
ServerName mysite.server.com

SSLEngine On
SSLProxyEngine On
SSLCipherSuite "ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM"
SSLProtocol -ALL +SSLv3 +TLSv1
SSLProxyProtocol -ALL +SSLv3 +TLSv1
SSLCertificateFile "/etc/certificates/mysite.crt"
SSLCertificateKeyFile "/etc/certificates/mysite.key"

<Location />
    Order deny,allow
    Deny from all
    AuthType Basic
    Require group <my access group>
    Allow from <my test ip>

    Satisfy Any
    AuthName "MyGroup"
</Location>

SetEnv proxy-chain-auth On
ProxyPreserveHost On
ProxyPass / http://backend.mysite.com/ retry=0 keepalive=On
ProxyPassReverse / http://backend.mysite.com/
</VirtualHost>

答案1

您可能遇到了 DNS 解析问题backend.mysite.com,无论主机名到底是什么。DNS 解析需要很长时间,但一旦成功,就会被缓存几分钟。一旦缓存过期,您就会回到原点并再次等待。

要解决该问题,请修复导致问题的 DNS 服务器,或使用 IP 地址而不是主机名。

相关内容