Cette page donne des informations sur la configuration d'un site derrière un proxy.

Les proxies inverses

Adresse à utiliser derrière les noms DNS publics des sites web (CNAME) : prod-proxy-vip.vpc02.auf.org.

L'adresse IP flottante correspondante (137.74.32.196) est gérée avec un keepalived entre prod-proxy01 et prod-proxy02.

Nom DNS public

IP publique

IP privée

Nom DNS privé

prod-proxy01.vpc02.auf.org

137.74.32.194

10.242.1.194

prod-proxy01.vpc02.auf

prod-proxy02.vpc02.auf.org

137.74.32.195

10.242.1.195

prod-proxy02.vpc02.auf

Configuration derrière les proxies inverses

Config' de Symfony derrière un proxy

Ajouter la ligne suivante juste après $request = Request::createFromGlobals(); dans web/app.php :

Request::setTrustedProxies(array($request->server->get('REMOTE_ADDR')));

Référence : http://symfony.com/doc/current/deployment/proxies.html

Config' de Drupal derrière un proxy

Ajouter les lignes suivantes dans settings.php :

$conf['reverse_proxy'] = TRUE;
$conf['reverse_proxy_addresses'] = array('10.242.1.194', '10.242.1.195');

Référence : https://www.drupal.org/node/425990

Config' VirtualHost Apache derrière un proxy

Exemple pour le site transfer.auf.org, fichier /etc/apache2/sites-available/transfer.auf.org.conf sur la machine prod-transfer2-backend.vpc02.auf :

<VirtualHost *:80>
    ServerName http://transfer.auf.org
    ServerAdmin transfer@auf.org
    DocumentRoot /home/auf-transfer/public_html/web/
    ErrorLog ${APACHE_LOG_DIR}/transfer.auf.org_error.log
    CustomLog ${APACHE_LOG_DIR}/transfer.auf.org_access.log combined
    LogLevel warn
    Redirect / https://transfer.auf.org/
</VirtualHost>

<VirtualHost *:443>
    ServerName https://transfer.auf.org
    ServerAdmin transfer@auf.org
    DocumentRoot /home/auf-transfer/public_html/web/
    ErrorLog ${APACHE_LOG_DIR}/transfer.auf.org-ssl_error.log
    CustomLog ${APACHE_LOG_DIR}/transfer.auf.org-ssl_access.log combined
    LogLevel warn
    <Location />
        AuthType "Mellon"
        #MellonEnable "auth"
        MellonEnable "info"
        #MellonUser "mail"
        # les méta-données
        MellonDefaultLoginPath "/"
        MellonOrganizationName "AuF Transfer 2"
        MellonOrganizationDisplayName "fr" "AuF Dispositif Transfer 2"
        MellonOrganizationURL "http://www.auf.org"
        MellonSPPrivateKeyFile /etc/ssl/private/saml-auf-transfer-key.pem
        MellonSPCertFile /etc/ssl/certs/saml-auf-transfer-cert.pem
        MellonIdPMetadataFile /etc/ssl/saml-id.auf.org-metadata.xml
        # les conditions d'accès
        MellonUser "mail"
        MellonCond "mail" "^[^@]*@auf\.org$" [REG]
        MellonSetEnvNoPrefix "transfer-mellon-name" "displayName"
        MellonSetEnvNoPrefix "transfer-mellon-mail" "mail"
        MellonSetEnvNoPrefix "transfer-mellon-sn" "sn"
        MellonSetEnvNoPrefix "transfer-mellon-gn" "gn"
    </Location>
    <Location /mellon/>
        AuthType "Mellon"
        MellonEnable "info"
    </Location>
    <Location /login>
        AuthType "Mellon"
        MellonEnable "info"
    </Location>
    <Location /api>
        AuthType "Mellon"
        MellonEnable "info"
    </Location>
</VirtualHost>

Config' des logs Apache 2.4 derrière un proxy

Pour que les logs locaux rapportent bien les adresses IP originelles des accès, il faut activer le module remoteip dans Apache :

sudo a2enmod remoteip

Créer ensuite un fichier /etc/apache2/conf-enabled/local-remoteip.conf avec le contenu suivant :

<IfModule remoteip_module>
    RemoteIPInternalProxy 127.0.0.1 ::1 10.242.1.194 10.242.1.195
    #RemoteIPTrustedProxy 10.242.1.194
    RemoteIPHeader X-Forwarded-For
    #RemoteIPHeader X-Real-IP
    LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%a %l %u %t \"%r\" %>s %O" common
</IfModule>

Et enfin relancer Apache :

sudo apache2ctl configtest && sudo apache2ctl graceful

Config' de mod_auth_mellon derrière un proxy

Ajouter cette ligne à la configuration de mod_auth_mellon pour éviter la vérification de l'adresse IP du client (qui est ici le proxy) par rapport à celle indiquée dans l'assertion SAML :

MellonSubjectConfirmationDataAddressCheck Off