Apache-2.2
如何使用基本身份驗證保護在 Apache2 虛擬主機中反向代理的 Tomcat webapp?
我無法弄清楚如何添加基本 HTTP 身份驗證來密碼保護在生產 Web 伺服器上執行的開發測試環境。主站點和測試環境都是虛擬主機,它們使用 AJP 代理來提供單獨的 Tomcat webapp 實例。我們需要防止公眾在不更改 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>
作為記錄,涉及以下版本: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>