如何使用基本身份validation来保护在Apache2虚拟主机中反向代理的Tomcat web应用程序?

我很难弄清楚如何添加基本的HTTP身份validation来密码保护生产Web服务器上运行的开发testing环境。 主站点和testing环境都是使用AJP代理服务Tomcat webapps的单独实例的虚拟主机。 我们需要阻止公众访问testing环境,而不必在Tomcat环境中对web.xml进行更改,而使用Apache而不是Tomcat来实现保护。 然而,虚拟主机中的ProxyPass和ProxyPassReverse指令似乎覆盖了使用.htaccess或者放在<Directory>控制块中的任何东西,而似乎我不能在<VirtualHost>控制的主体中使用像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> 

为了logging,涉及以下版本: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>