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/