首页 文章

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

提问于
浏览
2

我无法弄清楚如何添加基本的HTTP身份验证来密码保护 生产环境 Web服务器上运行的开发测试环境 . 主站点和测试环境都是使用AJP代理来为Tomcat Web应用程序的单独实例提供服务的虚拟主机 . 我们需要阻止公众访问测试环境而不在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>

我可以在控制块内移动AJP代理配置吗?我看了this StackOverflow Q&A,表明它支持身份验证 . 它是否会在控制块内得到支持(解决方案是否在httpd.conf中)?

目前,我们使用防火墙进行IP过滤,但项目中涉及的一些人需要从家中访问测试环境,并且他们的Internet连接没有固定的IP地址,因此密码保护将减少维护从长远来看,为远程工作提供更多灵活性 .

为了记录,涉及以下版本:Apache:2.2.14 / Tomcat:7.0.23 / Java:SE 1.6.0_26-b03 / OS:Ubuntu 10.04 LTS

1 回答

  • 2

    由Shane Madden提出的工作解决方案可以找到here . documentation指定允许相关指令的上下文包括但没有提及,尽管它似乎并且实际上是等效/可互换的,除了内容源的区别 . 以下是我想要的:

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

相关问题