Веб-приложение за обратным прокси-сервером - как мне работать с SSL? - PullRequest
2 голосов
/ 19 декабря 2010

У меня есть публичный сервер 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!) 

Вот мой конфиг для веб-сервера (прокси-сервера):

<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>

1 Ответ

1 голос
/ 19 декабря 2010

Я продолжаю отвечать на свои вопросы:)

Вот мое решение «работает до тех пор, пока оно не сломается»: я изменил настройку VirtualHost, чтобы всегда перенаправлять http: // запросы для / svn * на https.Иногда клиент будет перенаправляться дважды (если он не использует косую черту), но это нормально для меня.Перенаправление одно: сервер SVN перенаправляет клиента по правильному пути с косой чертой (хотя и забывает о https), перенаправление два: веб-сервер перенаправляет клиента обратно на 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>
...