Мне сложно понять, как добавить базовую HTTP-аутентификацию для защиты паролем тестовой среды разработки, запущенной на рабочем веб-сервере. И основной сайт, и среда тестирования - это виртуальные хосты, которые используют прокси AJP для обслуживания отдельных экземпляров веб-приложений Tomcat. Нам необходимо предотвратить доступ общественности к среде тестирования без внесения изменений в web.xml в среде Tomcat, защита должна быть обеспечена с помощью Apache, а не Tomcat. Однако директивы ProxyPass и ProxyPassReverse на виртуальном хосте, похоже, отменяют использование .htaccess или чего-либо, что я помещаю в блок управления <Directory>, хотя кажется, что я не могу использовать такие директивы, как AuthType, в основном теле элемента управления <VirtualHost> блок рядом. Я не очень разбираюсь в 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>
Для справки, задействованы следующие версии: Apache: 2.2.14 / Tomcat: 7.0.23 / Java: SE 1.6.0_26-b03 / OS: Ubuntu 10.04 LTS
Как вы обнаружили, <Directory>
блоки не применяются, потому что вы обслуживаете контент с прокси-сервера, а не из локального каталога.
Пытаться <Location>
вместо.
<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>