2011-02-16 29 views
29

Intentando configurar mi proxy inverso con autenticación básica antes de reenviar el tráfico a mi servidor back-end. ¿Alguien puede darme una solución?Apache proxy inverso con autenticación básica

Ejemplo aquí:

de usuario (Internet) -> servidor proxy/vhosts inversa (necesita agregar autenticación básica aquí) -> volver servidor de las partes (no autenticado)

Respuesta

50

Puede seguir las instrucciones aquí: Authentication, Authorization y Access Control. La principal diferencia para su proxy inverso es que usted quiere poner las cosas de autenticación dentro de un bloque de ubicación, a pesar de que los documentos dicen que sólo están permitidos en bloques de directorio:

<Location /> 
    AuthType Basic 
    ... 
</Location> 

fuera del bloque de ubicación que puede poner sus comandos de proxy, tales como:

ProxyPass/http://localhost:8080/ 
+0

Sí, funciona incluso con proxy inverso. – lzap

+1

para el registro el [doc] (http://httpd.apache.org/docs/2.2/mod/directive-dict.html#Context) indica que funciona en este contexto. "directorio Una directiva marcada como válida en este contexto se puede usar dentro de los contenedores , , y y en los archivos de configuración del servidor, sujeto a las restricciones descritas en Secciones de configuración." – Pete

16

Esta es la configuración que he utilizado para llevar a cabo la autenticación básica a través de HTTPS en contra de una base de datos. Mi servidor backend ejecuta Tomcat y me conecto usando AJP. El número de puerto divertido (4443) se debe a que el puerto estándar (443) ya se utilizó y no quería configurar varios servicios https en el mismo puerto.

<IfModule mod_ssl.c> 
NameVirtualHost *:4443 
<VirtualHost *:4443> 
     ServerAdmin [email protected] 
     ServerName ws.myserver.se 
     ServerAlias ws.myserveralias.se 
     ErrorLog /var/log/apache2/ajpProxy.error.log 

     # Possible values include: debug, info, notice, warn, error, crit, 
     # alert, emerg. 
     LogLevel info 

     CustomLog /var/log/apache2/ajpProxy.log combined 

     DBDriver mysql 
     DBDParams "host=127.0.0.1 port=3306 user=proxyAuthUser pass=yourDbPasswordHere dbname=yourDbName" 
     DBDMin 4 
     DBDKeep 8 
     DBDMax 20 
     DBDExptime 300   

     <Proxy *> 
       # core authentication and mod_auth_basic configuration 
       # for mod_authn_dbd 
       AuthType Basic 
       AuthName "Backend auth name" 
       AuthBasicProvider dbd 

      # core authorization configuration 
       Require valid-user 

       # mod_authn_dbd SQL query to authenticate a user 
       AuthDBDUserPWQuery \ 
       "SELECT password FROM user WHERE emailAddress = %s" 

       AddDefaultCharset Off 
       Order deny,allow 
       Allow from all 
     </Proxy> 

     ProxyPass/ajp://localhost:8009/ 
     ProxyPassReverse/ajp://localhost:8009/ 

     # SSL Engine Switch: 
     # Enable/Disable SSL for this virtual host. 
     SSLEngine on 

     # A self-signed (snakeoil) certificate can be created by installing 
     # the ssl-cert package. See 
     # /usr/share/doc/apache2.2-common/README.Debian.gz for more info. 
     # If both key and certificate are stored in the same file, only the 
     # SSLCertificateFile directive is needed. 
     SSLCertificateFile /etc/apache2/ssl/yourCertificateFile.crt 
     SSLCertificateKeyFile /etc/apache2/ssl/yourPrivateKeyFile.key 
     <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 
     # MSIE 7 and newer should be able to use keepalive 
     BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown 
</VirtualHost> 
</IfModule> 
2

En primer lugar, comprobar si su apache2 tiene el paquete de utilidades

sudo apt-get install apache2-utils 

A continuación, establezca el nombre de usuario y contraseña.

sudo htpasswd -c /etc/apache2/.htpasswd <username> 

Después de eso, editar su proxy inverso para utilizar la autenticación de

<VirtualHost *:80> 
    ProxyPreserveHost On 

    ProxyPass/http://someaddress:1234/ 
    ProxyPassReverse/http://someaddress:1234/ 

    Timeout 5400 
    ProxyTimeout 5400 

    ServerName dev.mydomain.com 
    ServerAlias *.dev.mydomain.com 

    <Proxy *> 
     Order deny,allow 
     Allow from all 
     Authtype Basic 
     Authname "Password Required" 
     AuthUserFile /etc/apache2/.htpasswd 
     Require valid-user 
    </Proxy> 
</virtualhost> 

Al menos, actualizar su apache

sudo service apache2 reload 
Cuestiones relacionadas