我有一个在 nginx 反向代理后面运行的 Apache2/svn 服务器。基本身份验证由 nginx 完成,因此反向代理后面的 Apache2 服务器基本上不必执行任何身份验证工作。
我在 svn mod_authz_svn 的授权配置中有一个用户条目:
[/]
* = r
test = rw
用户测试可以结帐但不能提交。
我不知道如何将经过身份验证的用户从 nginx 提供给托管 svn 安装的 apache2 服务器。
我尝试过的:
在 nginx 反向代理中设置 Remote-User HTTP 标头
proxy_set_header REMOTE_USER $remote_user;
转发授权标头
proxy_set_header Authorization $http_authorization;
proxy_pass_header Authorization;
答案1
我有同样的问题,并且通过使用 apache mod_authn_anon 模块解决了它。
Apache 配置:
LoadModule authn_anon_module /usr/lib/apache2/mod_authn_anon.so
LoadModule dav_svn_module /usr/lib/apache2/mod_dav_svn.so
LoadModule authz_svn_module /usr/lib/apache2/mod_authz_svn.so
<Location /some/path/svn>
DAV svn
SVNPath /svn
SVNReposName /some/path/svn
# Authentication is performed by the reverse proxy, the username is
# forwarded/set in the Remote-User header by the proxy.
# Use anon authentication module, allowing anybody to access this path,
# but registering the user in svn.
AuthType Basic
AuthName SVN
AuthBasicProvider anon
Anonymous "*"
Require valid-user
</Location>
Nginx 配置:
location /some/path/svn {
proxy_set_header Host $host;
proxy_pass http://svn/some/path/svn;
proxy_set_header Remote-User $remote_user;
}