example apache authentication proxy reverse reverse-proxy

example - apache virtual host reverse proxy



Apache proxy inverso con autenticación básica (3)

Estoy intentando configurar mi proxy inverso con autenticación básica antes de reenviar el tráfico a mi servidor de fondo. ¿Alguien puede darme una solución?

Ejemplo aquí:

Usuario (internet) -> servidor proxy / vhosts inverso (necesita agregar autenticación básica aquí) -> servidor back-end (no autenticado)


Aquí está la configuración que he usado para lograr la autenticación básica sobre https en 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 webmaster@localhost 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>


Primero, verifica si tu apache2 tiene el paquete utils

sudo apt-get install apache2-utils

Luego, configure el nombre de usuario y la contraseña.

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

Después de eso, edite su proxy inverso para usar la autenticación

<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, actualiza tu apache

sudo service apache2 reload


Puede seguir las instrucciones aquí: Autenticación, Autorización y Control de acceso . La principal diferencia para su proxy inverso es que querrá colocar las cosas de autenticación dentro de un bloque de Ubicación, aunque los documentos dicen que solo están permitidos en los bloques de Directorio:

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

Fuera del bloque Ubicación, puede poner sus comandos de proxy, como por ejemplo:

ProxyPass / http://localhost:8080/