0

我有一个站点,它使用 apache 反向代理将旧的 IIS 系统与一些新的 rails 功能(相同的数据库)结合起来。这工作正常。

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

但是,当我使用摘要授权时,我的反向代理 /stylesheets 文件夹(指向 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 文件夹?

4

2 回答 2

1

我的猜测是您的代理正在将Authorization标头发送到 S3,而 S3 会响应该错误。这是因为 S3 使用相同的Authorization标头来授权 API 请求,并且它自己不支持基本或摘要身份验证。

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

于 2013-09-10T07:06:16.207 回答
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>

.

于 2013-09-17T06:33:51.330 回答