web-dev-qa-db-fra.com

Proxy inverse Apache avec authentification de base

Essayer de configurer mon proxy inverse avec une authentification de base avant de transférer le trafic vers mon serveur principal. Quelqu'un peut-il me donner une solution.

Exemple ici:

Utilisateur (Internet) -> serveur proxy inverse/vhosts (besoin d'ajouter l'authentification de base ici) -> serveur principal (non authentifié)

40
Vincent P

Vous pouvez suivre les instructions ici: Authentification, Autorisation et Contrôle d'accès . La principale différence pour votre proxy inverse est que vous souhaiterez placer les éléments d'authentification dans un bloc d'emplacement, même si les documents indiquent qu'ils ne sont autorisés que dans les blocs d'annuaire:

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

En dehors du bloc Emplacement, vous pouvez placer vos commandes proxy, telles que:

ProxyPass / http://localhost:8080/
69
Lawrence Kesteloot

Voici la configuration que j'ai utilisée pour accomplir l'authentification de base sur https contre une base de données. Mon serveur principal exécute Tomcat et je me connecte à lui en utilisant AJP. Le drôle de numéro de port (4443) est dû au fait que le port standard (443) était déjà utilisé, et je ne voulais pas configurer plusieurs services https sur le même port.

<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>
17
Daniel Wahlberg

Tout d'abord, vérifiez si votre Apache2 a le paquet utils

Sudo apt-get install Apache2-utils

Ensuite, définissez le nom d'utilisateur et le mot de passe.

Sudo htpasswd -c /etc/Apache2/.htpasswd <username>

Après cela, modifiez votre proxy inverse pour utiliser l'authentification

<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>

Au moins, mettez à jour votre Apache

Sudo service Apache2 reload
11
Thiago Mata