具有摘要身份验证的Apache反向代理可阻止Amazon S3中的样式表

时间:2013-09-08 17:26:10

标签: apache amazon-s3 stylesheet reverse-proxy digest-authentication

我有一个使用apache反向代理的站点将旧的IIS系统与一些新的rails功能(相同的数据库)相结合。这很好。

对于暂存,我创建了一个与上面相同的测试版网站,除了我使用ip地址和摘要授权只允许开发人员访问。这适用于IP地址。

但是,当我使用摘要授权时,我的反向代理/样式表文件夹(指向Amazon S3存储桶)被阻止,并出现如下错误:

InvalidArgumentUnsupported Authorization TypeDigest username="danv", realm="BETA-ACCESS", nonce="ZiudHuLlBAA=d9fa13adaa4f0bd37e3faa7b30ed6bd60a5570b2", uri="/stylesheets/default/screen.css", algorithm=MD5, response="7e1bc11912474647756537bb0bd3e488", qop=auth, nc=00000007, cnonce="ed4a08fc70364cb9"Authorization0E3F4E27386E0A00BTZfZ5Uv4PwuMzOCoIYhorPEuPOdNusLZjTDowqlZXImxZ0bLjt22B9Y5v7wc8+4

我在网上搜索过但无法找到有关此行为的任何内容。

以下是虚拟主机文件的相关部分:

# IP and DIGEST ACCESS
<Proxy *>
    Order Deny,Allow
    Deny from All
    Allow from 127.0.0.1
    Include "D:\wamp\admin-allow.inc"
    AuthType Digest
    # realm associated with digest passwd
    AuthName "BETA-ACCESS"
    AuthDigestDomain /
    AuthUserFile "D:/wamp/digest"
    Require valid-user
    Satisfy Any
</Proxy>

# Reverse proxy pointing to CNAME that points to:
#  http://lib.decdynamics.com.s3.amazonaws.com/stylesheets
ProxyPass /stylesheets http://lib.decdynamics.com/stylesheets
ProxyPassReverse /stylesheets http://lib.decdynamics.com/stylesheets

这是一个显示对样式表的直接访问的URL:
    http://lib.decdynamics.com/stylesheets/default/screen.css

这里通过摘要授权访问相同的样式表(当然需要登录):
    http://beta.decdynamics.com/stylesheets/default/screen.css

我做错了什么?

是否可以从授权中排除/ stylesheets文件夹?

2 个答案:

答案 0 :(得分:1)

我的猜测是你的代理正在向{S3}发送Authorization标头,S3会回应该错误。这是因为S3使用相同的Authorization标头来授权API请求,并且它不支持基本或摘要式身份验证。

对本地后端进行测试,并验证代理发送的请求标头。如果确实存在Authorization标头,请在代理上重写请求,以便在将其发送到S3后端之前将其删除。

答案 1 :(得分:0)

感谢 drco 的灵感。

我决定基于我的真实网站创建一个工作示例(域名和IP地址不是真实的)。

注意我必须使用Location元素来隔离/ stylesheets,/ images和/ javascript文件夹。将来我会用一个/ assets文件夹来干这个。

我有一个基于WAMP的apache服务器充当反向代理,将Windows IIS服务器子文件夹与基于Linux的RAILS服务器以及来自Amazon S3的RAILS资产混合在一起。现在,当我使用此站点进行开发时,它使用摘要授权进行保护。这也让我能够让少数客户直接访问测试版。

#========================
# B E T A . E X A M P L E . C O M
#
<VirtualHost *:80>
  ServerAdmin admin@example.com
  ServerName    beta.example.com
  ServerAlias   www.beta.example.com
  DocumentRoot "D:/wamp/www_proxy"
  ErrorLog "D:/wamp/logs/beta.example.com-error.log"
  CustomLog "D:/wamp/logs/beta.example.com-access.log" combined

  ProxyRequests Off
  <Proxy *>
    Order Deny,Allow
    Deny from All
    Allow from 127.0.0.1
    Include "D:\wamp\admin-allow.inc"
    AuthType Digest
    # realm associated with digest passwd
    AuthName "BETA-ACCESS"
    AuthDigestDomain /
    AuthUserFile "D:/wamp/digest"
    Require valid-user
    Satisfy Any
  </Proxy>

  # I I S
  ProxyPass /ddaps http://localhost:8104/ddaps
  ProxyPassReverse /ddaps http://localhost:8104/ddaps

  ProxyPass /admin http://localhost:8104/admin
  ProxyPassReverse /admin http://localhost:8104/admin

  ProxyPass /themes http://localhost:8104/themes
  ProxyPassReverse /themes http://localhost:8104/themes

  # RAIL ASSETS
  ProxyPass /stylesheets http://lib.example.com/stylesheets
  ProxyPassReverse /stylesheets http://lib.example.com/stylesheets
  <Location /stylesheets>
    RequestHeader unset Authorization
  </Location>

  ProxyPass /images http://lib.example.com/images
  ProxyPassReverse /images http://lib.example.com/images
  <Location /images>
    RequestHeader unset Authorization
  </Location>

  ProxyPass /javascripts http://lib.example.com/javascripts
  ProxyPassReverse /javascripts http://lib.example.com/javascripts
  <Location /javascripts>
    RequestHeader unset Authorization
  </Location>

  # R A I L S
  ProxyPass / http://xxx.xxx.xxx.xxx:8104/
  ProxyPassReverse / http://xxx.xxx.xxx.xxx:8104/

</VirtualHost>