我有一个公共Apache服务器,需要代理内部Apache服务器(用于SVN访问)。我想要的是:
User ---[HTTPS]---> Web Server ---[HTTP]---> SVN Server
我对SSL处理不太熟悉,所以我想对这种方法有一些看法。这是一个好的模型;我应该在任何地方使用SSL等等。
我的方法大部分都有效,但在重定向重定向回HTTPS时失败了。如果用户前往
https://acme.web.mcx/svn (no trailing '/')
它们被SVN服务器重定向到
http://acme.web.mcx/svn/ (almost there!)
这是我对Web服务器(代理服务器)的配置:
<VirtualHost *:443>
ServerAdmin me@admin.com
ServerAlias *.web.mcx www.web.mcx web.mcx
DocumentRoot /server/web/app/webroot
ErrorLog logs/web-error_log
CustomLog logs/web-access_log common
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.web\.mcx$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([^.]+)\.web\.mcx$ [NC]
RewriteRule ^/svn(.*) http://db.mcx/svn$1 [P]
ProxyPassReverse /svn http://db.mcx/svn
ProxyPreserveHost on
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/server.crt
SSLCertificateKeyFile /etc/httpd/ssl/server.key
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyVia On
<Location /svn/>
<Limit OPTIONS PROPFIND GET REPORT MKACTIVITY PROPPATCH PUT CHECKOUT MKCOL MOVE COPY DELETE LOCK UNLOCK MERGE>
Order Deny,Allow
Allow from all
Satisfy Any
</Limit>
</Location>
答案 0 :(得分:1)
我一直在回答自己的问题:)
这是我的'工作直到它破解'解决方案:我将我的VirtualHost设置更改为始终将http:// / svn *的请求重定向到https。客户端有时会被重定向两次(如果他们不使用尾部斜杠),但这对我没问题。重定向一:SVN服务器使用斜杠将客户端重定向到正确的路径(虽然忘记了https),重定向两个:Web服务器将客户端重定向回https。
<VirtualHost *:80>
ServerAdmin me@admin.com
ServerAlias *.web.mcx www.web.mcx web.mcx
DocumentRoot /server/web/app/webroot
ErrorLog logs/web-error_log
CustomLog logs/web-access_log common
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.web\.mcx$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([^.]+)\.web\.mcx$ [NC]
RewriteCond %{REQUEST_URI} svn.*
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R,L]
ProxyRequests Off
</VirtualHost>