IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Paramétrer RewriteCond pour forcer un passage par un htaccess


Sujet :

Apache

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2002
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 33
    Points : 31
    Points
    31
    Par défaut Paramétrer RewriteCond pour forcer un passage par un htaccess
    Bonjour
    J'utilise une serveur Apache (mod SSL) comme porte d'entrée de mon site, ce serveur est uniquement accessible aux utilisateurs identifiés.
    Le problème c'est que j'utilise par obligation sur le serveur un autre serveur html propriétaire sans sécurité.
    J'ai installé un mod_proxy en suivant les indications fournies cela fonctionne en appelant un port local, mais on peut accèder directement à l'URL redirigée sans passer par la page d'accueil.

    Je pense que je devrais passer un RewriteCond avant RewriteRule pour n'accepter que les arrivées depuis ma page d'accueil mais je n'arrive pas à le paramétrer avec les bons paramètres.

    voila ma configuration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <IfModule mod_ssl.c>
    	<VirtualHost _default_:443>
                RewriteEngine on
                RewriteRule ^/toto/(.*) http://localhost:8080/toto/$1 [proxy]
                RewriteRule ^/toto <a href="http://localhost:8080" target="_blank">http://localhost:8080</a> [proxy]
                SetEnv force-proxy-request-1.0 1
                SetEnv proxy-nokeepalive 1
     
                DocumentRoot /var/www/html
                ....
     
    	</VirtualHost>
    </IfModule>
    Merci

  2. #2
    Membre actif Avatar de silfun1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 127
    Points : 210
    Points
    210
    Par défaut
    Bonjour JLgarioud,

    J'avoue que je trouve ta configuration un peu bizarre
    Mélanger rewrite ruels et proxy, c'est un mélange qui peut vite devenir compliqué!

    Si je comprends bien, tu veux faire une redirection (rewrite rule) pour obliger les gens à s'authentifier ?, et une fois authentifié, utiliser le mod-proxy vers le sereur "propriétaire" ?

    A mon avis, le plus simple est de tout faire en proxy. En effet, on peut utiliser les dparamertes Require valid-user dans les balises <Proxy>.
    Voici un exemple de configuration, mais ! Attention, je n'ai rien testé!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <IfModule mod_ssl.c>
    	<VirtualHost _default_:443>
     
    		ServerName monserveur
    		ServerAdmin admin@monserveur
    		ErrorLog logs/monserveur-error_log
    		DocumentRoot /var/www/html/
     
    		##########
    		## Restreindre l'accès aux seules persones autorisées
     
    		# Pour créer un fichier .htdigest
    		#htdigest -c /data/www/.htdigest 'Ressource restreinte' 'username' 
     
    		<Proxy *>
    			AuthType Digest
    			AuthDigestDomain /
    			AuthName "Ressource restreinte"
    			AuthDigestProvider file
    			AuthUserFile /data/www/.htdigest
    			Require valid-user
    		</Proxy>
     
     
    		ProxyRequests Off
    		SetEnv force-proxy-request-1.0 1
    		SetEnv proxy-nokeepalive 1
     
    		ProxyPass /toto <a href="http://localhost:8080/toto/" target="_blank">http://localhost:8080/toto/</a>
    		ProxyPassReverse /toto <a href="http://localhost:8080/toto/" target="_blank">http://localhost:8080/toto/</a>
     
    	</VirtualHost>
    </IfModule>

    Sources =
    https://wiki.apache.org/httpd/PasswordBasicAuth
    https://httpd.apache.org/docs/2.4/mod/mod_proxy.html


    ps: Peux-tu nous donner ta version de Apache (2.2 ou 2.4 ?)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2002
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    Merci de ton aide

    Server version: Apache/2.4.18 (Ubuntu)
    Server built: 2016-07-14T12:32:26

    Je comprends bien ta solution, utilisez un fichier htpasswd et pourquoi pas celui qui existe?
    Mais je veux appeler le serveur propriétaire (calibre) depuis ma page d'accueil.

    Je te mets plus bas le fichier complet.
    j'ai utilisé la doc ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <VirtualHost 192.168.1.111:80>
      ServerName	<monsite>.net
      Redirect	/ https://<monsite>.net
    </VirtualHost>
     
    <IfModule mod_ssl.c>
    	<VirtualHost _default_:443>
    		ServerAdmin mail@<xxxx>  
     
                   RewriteEngine on 
                   RewriteRule ^/calibre/(.*) http://localhost:8080/calibre/$1 [proxy]
                   RewriteRule ^/calibre http://localhost:8080 [proxy]
                   SetEnv force-proxy-request-1.0 1
                   SetEnv proxy-nokeepalive 1
     
    		DocumentRoot /var/www/html
    		ErrorLog ${APACHE_LOG_DIR}/error.log
    		CustomLog ${APACHE_LOG_DIR}/access.log combined
     
    		SSLEngine on
    	        SSLCertificateFile /etc/apache2/ServerCertificate.crt
    	        SSLCertificateKeyFile /etc/apache2/cachou.net.key 
    	        SSLCertificateChainFile /etc/apache2/CACertificate-INTERMEDIATE.crt
     
                   <Directory "/var/www/html"> 
                        AllowOverride All
                        AuthType Basic
                        AuthName "Merci de vous inscrire"
                        AuthUserFile /etc/apache2/.htpasswd
                        Require valid-user
                   </Directory>
     
    	       <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>

  4. #4
    Membre actif Avatar de silfun1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 127
    Points : 210
    Points
    210
    Par défaut
    Je ne savais pas que tu avais déja un htpasswd.
    Dans mon exemple de solution, Le but est de remplacer ton authentification sur ton documentRoot actuel (<Directory "/var/www/html">) par celui de ton proxy (qui redirige vers ton deuxieme serveur).

    Peux tu me dire qi je comprends bien ta problèmatique ?
    - tu veux faire une redirection (rewrite rule) pour obliger les gens à s'authentifier ?, et une fois authentifié, utiliser le mod-proxy vers le sereur "propriétaire" ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2002
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    J'avoue que c'est un peu tordu, il y a deux serveurs le classique Apache en frontal avec l'authentification bien connue et le serveur propriétaire qui est accessible via le mode rewrite* :
    "https://<mon_site>/calibre" permet de l'atteindre depuis de la page d'accueil mais depuis l'extérieur aussi !
    Voilà le souci, l'authentification est court-circuitée.


    * Je n'ai pas trouvé d'autres façons de donner accès au serveur interne

  6. #6
    Membre actif Avatar de silfun1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2015
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 127
    Points : 210
    Points
    210
    Par défaut
    Salut Jlgarioud,

    Au vu de ta réponse, on peut dire que j'avais donc bien compris ton problème.
    A mon avis, tu te prend la tête avec des redirections, alors que le module proxy peut faire tout le boulot, et ceci en simplifiant ta configuration. Apache permet de faire du "proxing" via des paramètres "rewrite", mais si tu peux séparer les deux, c'est mieux.
    Ma première proposition de solution allait dans ce sens.
    Oubli ton authentification dans ta balise Directory (Directory "/var/www/html)
    ---> le mod proxy peut s'en charger. Du coup, tu n'a plus besoin des redirections
    Oubli tes redirections "rewrite" [proxy]
    ---> le mod proxy s'en charge
    Pour l'authentification, je préférè le mode digest au mode basic. Certe, tu es en https, donc pas de problème de mot de passe en clair. Pour ce point la, c'est à toi de choisir.

    Voici ma deuxième proposition, en partant de ton fichier de configuration:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <VirtualHost 192.168.1.111:80>
      ServerName	<monsite>.net
      Redirect	/ https://<monsite>.net
    </VirtualHost>
     
    <IfModule mod_ssl.c>
    	<VirtualHost _default_:443>
    		ServerAdmin mail@<xxxx>  
     
    		ErrorLog ${APACHE_LOG_DIR}/error.log
    		CustomLog ${APACHE_LOG_DIR}/access.log combined
     
    		SSLEngine on
    		SSLCertificateFile /etc/apache2/ServerCertificate.crt
    		SSLCertificateKeyFile /etc/apache2/cachou.net.key 
    		SSLCertificateChainFile /etc/apache2/CACertificate-INTERMEDIATE.crt
     
    		DocumentRoot /var/www/html
    		<Directory "/var/www/html"> 
    			Options -Indexes -FollowSymLinks -MultiViews +Includes
    			AllowOverride All
    			#Require all granted
    			Require all denied
    		</Directory>
     
    		<Proxy *>
    			#Mode basic
    			AuthType Basic
    			AuthName "Merci de vous inscrire"
    			AuthUserFile /etc/apache2/.htpasswd
    			AuthType Digest
    			#Mode digest
    			#AuthDigestDomain /
    			#AuthName "Merci de vous inscrire"
    			#AuthDigestProvider file
    			#AuthUserFile /etc/apache2/.htdigest
     
    			Require valid-user
    		</Proxy>
     
     		ProxyRequests Off		
    		SetEnv force-proxy-request-1.0 1
    		SetEnv proxy-nokeepalive 1
     
    		ProxyPass /calibre http://localhost:8080/calibre/
    		ProxyPassReverse /calibre http://localhost:8080/calibre/
     
    		#Reecriture des liens html
    		#LoadModule proxy_html_module /usr/lib/apache2/modules/mod_proxy_html.so
    		#SetOutputFilter proxy-html
    		#ProxyHTMLURLMap http://localhost:8080/calibre/ http://www.Dmonsite.com/calibre
    		#RequestHeader unset Accept-Encoding
     
    		<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>

Discussions similaires

  1. [Débutant] forcer le passage par le bloc catch
    Par ouinih dans le forum C#
    Réponses: 5
    Dernier message: 15/07/2011, 17h38
  2. [Putty] Forcer le passage par un proxy
    Par gege2061 dans le forum Internet
    Réponses: 2
    Dernier message: 29/05/2008, 17h35
  3. Réponses: 8
    Dernier message: 03/12/2006, 18h46
  4. passage par paramètre d'un tableau dynamique bidimensionnel
    Par shaftJackson dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 17/07/2006, 14h28
  5. Réponses: 3
    Dernier message: 10/05/2006, 19h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo