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

标签 apache authentication tomcat virtualhost ajp

我无法弄清楚如何添加基本的 HTTP 身份验证来密码保护在生产 Web 服务器上运行的开发测试环境。主站点和测试环境都是虚拟主机,它们使用 AJP 代理服务单独的 Tomcat web 应用程序实例。我们需要防止公众访问测试环境而不更改 Tomcat 环境中的 web.xml 保护必须使用 Apache 而不是 Tomcat 来实现。但是,虚拟主机中的 ProxyPass 和 ProxyPassReverse 指令似乎覆盖了 .htaccess 或我放入 控制 block 中的任何内容,而我似乎无法在 控件的主体中使用像 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>

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

目前,我们使用防火墙按 IP 过滤,但参与项目的少数人需要从家里访问测试环境,他们没有固定的 IP 地址用于他们的互联网连接,因此密码保护将涉及从长远来看维护更少,并为远程工作提供更大的灵 active 。

备案,涉及以下版本:Apache:2.2.14/Tomcat:7.0.23/Java:SE 1.6.0_26-b03/OS:Ubuntu 10.04 LTS

最佳答案

可以找到由 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>

关于apache - 如何使用基本身份验证保护在 Apache2 虚拟主机中反向代理的 Tomcat Web 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8972127/

相关文章:

php - Apache 内存问题

python - Flask 中的简单例份验证在 Apache 下不起作用

asp.net - 无需身份验证的 URL 重写

php - Symfony2 : Check user authentication based on path

spring - 将我基于 spring 的 maven 项目从 JBoss EAP 6 迁移到 tomcat 8.0 时出现异常

spring - 如何更改 Spring Data REST HATEOAS 链接中的主机名?

spring - http 状态 404 hello.jsp (apache tomcat 6)

apache - 静态IP地址,SSL证书,万恶之源

java.lang.NoSuchMethodError : com. opensymphony.xwork2.util.finder.UrlSet.includeClassesUrl 错误

apache - 在 Apache 服务器上运行的 AEM Dispatcher 上缓存视频返回 206