我在 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 地址而不是主机名。