Как я могу защитить веб-приложение Tomcat с обратным прокси-сервером на виртуальном хосте Apache2, используя обычную аутентификацию? - PullRequest
2 голосов
/ 23 января 2012

У меня проблемы с поиском того, как добавить базовую HTTP-аутентификацию для защиты паролем среды тестирования разработки, работающей на рабочем веб-сервере.И основной сайт, и среда тестирования являются виртуальными хостами, которые используют прокси AJP для обслуживания отдельных экземпляров веб-приложений Tomcat.Нам необходимо запретить доступ общественности к среде тестирования без внесения изменений в файл web.xml в среде Tomcat, защита должна быть достигнута с помощью Apache, а не Tomcat.Однако директивы ProxyPass и ProxyPassReverse в виртуальном хосте, по-видимому, переопределяют использование .htaccess или всего, что я помещаю в блок управления , в то время как кажется, что я не могу использовать директивы, такие как AuthType, в основной части элемента управления блок рядом.Я не очень опытен с Apache (или Tomcat) и не уверен, какие директивы могут применяться, где, а какие могут перекрывать другие.Поскольку изменения необходимо вносить на производственном сервере, я не могу легко экспериментировать, опасаясь возможного простоя.

Сам файл httpd.conf очень прост:

LoadModule  proxy_http_module   /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule  headers_module      /usr/lib/apache2/modules/mod_headers.so

LoadFile    /usr/lib/libxml2.so

соответствующий файл виртуального хоста, / etc / apache2 / sites-available / dev443 выглядит следующим образом:

<IfModule mod_ssl.c>
<VirtualHost dev.mydomain.com:80443>
    ServerName  dev.mydomain.com:80443
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/dev

    ProxyPass / ajp://127.0.0.1:8010/
    ProxyPassReverse / ajp://127.0.0.1:8010/

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/dev/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All 
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log

    LogLevel info

    CustomLog /var/log/apache2/ssl_access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

    SSLEngine on

    SSLCertificateFile    /etc/ssl/certs/server.crt
    SSLCertificateKeyFile /etc/ssl/private/server.key
    SSLCACertificateFile  /etc/ssl/certs/intermediate.crt

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
        SSLOptions +StdEnvVars
    </Directory>

    BrowserMatch "MSIE [2-6]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>
</IfModule>

Можно ли переместить конфигурацию прокси AJP в блок управления?Я посмотрел на эти вопросы и ответы по StackOverflow , которые подтверждают, что он поддерживает аутентификацию.Будет ли он поддерживаться внутри блока управления (решение есть в httpd.conf)?

В настоящее время мы фильтруем по IP с помощью брандмауэра, но несколько человек, участвующих в проекте, нуждаются в доступе к тестированию.среды из дома, и они не имеют фиксированных IP-адресов для своих подключений к Интернету, поэтому защита паролем потребует меньшего количества обслуживания в долгосрочной перспективе и обеспечит большую гибкость для удаленной работы.

Для справки, следующие версии:задействовано: Apache: 2.2.14 / Tomcat: 7.0.23 / Java: SE 1.6.0_26-b03 / ОС: Ubuntu 10.04 LTS

1 Ответ

2 голосов
/ 24 января 2012

Рабочее решение, предложенное Шейном Мэдденом, можно найти здесь . Документация указывает, что контексты, в которых разрешены соответствующие директивы, включают в себя, но там нет упоминаний о них, хотя кажется, что они фактически эквивалентны / взаимозаменяемы, за исключением различий в источнике контента. Следующее добивается того, чего я хотел:

<Location />
    ProxyPass ajp://127.0.0.1:8010/
    ProxyPassReverse ajp://127.0.0.1:8010/
    AuthType Basic
    AuthName "something"
    AuthUserFile /path/to/htpasswd
    Require valid-user
</Location>
...