我有一个使用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文件夹?
答案 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>
。