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

Django Python Discussion :

Problème URL dans appli Django avec reverse Proxy


Sujet :

Django Python

  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 183
    Par défaut Problème URL dans appli Django avec reverse Proxy
    Bonjour,

    J'ai un soucis avec une application Django que je lance depuis un reverse proxy.

    J'ai une seule URL du menu (compute) qui ne fonctionne pas. Dans le menu ou j’appelle l'URL, les autres fonctionnent.

    Erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                       Using the URLconf defined in webvirtcloud.urls,       Django tried these URL patterns, in this order:       
     
    <ol class="decimal"><li style="">                              ^$                 [name='index']</li><li style="">                              ^instances/</li><li style="">                              ^accounts/</li><li style="">                              ^computes/                                               ^/                 [name='computes']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/$                 [name='overview']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/statistics$                 [name='compute_graph']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/instances/$                 [name='instances']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/storages/$                 [name='storages']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/storage/(?P<pool>[\w\-\.\/]+)/volumes$                 [name='volumes']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/storage/(?P<pool>[\w\-\.\/]+)/$                 [name='storage']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/networks/$                 [name='networks']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/network/(?P<pool>[\w\-\.]+)/$                 [name='network']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/interfaces/$                 [name='interfaces']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/interface/(?P<iface>[\w\-\.\:]+)/$                 [name='interface']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/nwfilters/$                 [name='nwfilters']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/nwfilter/(?P<nwfltr>[\w\-\.\:]+)/$                 [name='nwfilter']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/secrets/$                 [name='secrets']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/create/$                 [name='create_instance']</li><li style="">                              ^computes/                                               ^(?P<compute_id>[0-9]+)/disk/(?P<disk>[\w\-\.\/]+)/buses$                 [name='buses']</li><li style="">                              ^logs/</li><li style="">                              ^datasource/</li><li style="">                              ^console/$                 [name='console']</li></ol>
                             The current path, computes/, didn't match any of these.
    Je ne trouve pas le fichier webvirtcloud.urls

    Je ne programme pas en Python.

    Merci de votre aide.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 688
    Par défaut
    Salut,

    Citation Envoyé par chrtophe Voir le message
    J'ai un soucis avec une application Django que je lance depuis un reverse proxy.
    En supposant que l'application fonctionne normalement si elle n'est pas accédée via le reverse proxy... ce dernier peut ré-écrire l'URL suivant sa configuration (et côté Django on se retrouve avec quelque chose qui ne matche plus).

    Malheureusement, s'il y a des solutions, elles dépendent beaucoup du reverse proxy utilisé (apache, nginx,...) et, si vous utilisez un reverse proxy "populaire", il va falloir chercher un peu sur Internet pour trouver comment configurer la redirection vers l'application Django pour que çà fonctionne.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 183
    Par défaut
    J'utilise Apache, ci-joint le virtualhost:

    Code apache : 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
    <ifModule mod_ssl.c>
     
    <VirtualHost *:443>
            ServerName secure.srv1.local
            ProxyPreserveHost On
            ProxyRequests On
            AllowEncodedSlashes NoDecode
            ProxyPass / http://127.0.0.1:8000/
            ProxyPassReverse / http:/127.0.0.1:8000/
            #ProxyPass computes http://127.0.0.1:8000/computes
            #ProxyPassReverse computes http://127.0.0.1:8000/computes
            SSLEngine on
            SSLCertificateFile /etc/ssl/srv1.local/srv1.local.pem
            #RequestHeader unset X-Forwarded-Proto
            #RequestHEader set X-Forwarded-Proto https env=HTTPS
    </VirtualHost>

    Ce que je ne comprends pas, c'est que seul l'URL computes dysfonctionne.
    Les lignes avec # sont des essais effectués.

    J'ai aussi essayé en ajoutant ceci au fichier settings.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #USE_X_FORWARDED_HOST = True
    #SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
    Bien sûr les # correspondent à une désactivation.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 688
    Par défaut
    Salut,

    C'est là qu'il faut regarder comment sont attrapées les URLs. Ce qui suppose trouver urls.py et comprendre aussi pourquoi çà ne trouve pas webvirtcloud.urls.
    Essayez de trouver quelqu'un qui sait farfouiller dans une applications Django car c'est pas facile à raconter.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 183
    Par défaut
    Le fichier urls.py :

    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
     
    from django.conf.urls import include, url
     
    from instances.views import index
    from console.views import console
    # from django.contrib import admin
     
    urlpatterns = [
        url(r'^$', index, name='index'),
     
        url(r'^instances/', include('instances.urls')),
        url(r'^accounts/', include('accounts.urls')),
        url(r'^computes/', include('computes.urls')),
        url(r'^logs/', include('logs.urls')),
        url(r'^datasource/', include('datasource.urls')),
     
     
        url(r'^console/$', console, name='console'),
        # (r'^admin/', include(admin.site.urls)),
    ]
    Je ne trouve pas les fichiers .urls
    Par contre à chaque ligne comme instances accounts etc correspond un dossier, qui contient chacun un fichier urls.py

    Je pense que j'ai un début de piste.

    Je vais regarder leur tête et si je comprend pas la différence j'en posterais un ok et celui de computes pas ok.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 183
    Par défaut
    Je ne vois pas de différence pouvant expliquer le problème.

    Fichier du lien accounts (fonctionnel) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    from django.conf.urls import url
    from django.contrib.auth import views as auth_views
    from . import views
     
    urlpatterns = [
        url(r'^login/$', auth_views.LoginView.as_view(template_name='login.html'), name='login'),
        url(r'^logout/$', auth_views.LogoutView.as_view(template_name='logout.html'), name='logout'),
        url(r'^profile/$', views.profile, name='profile'), url(r'^$', views.accounts, name='accounts'),
        url(r'^profile/(?P<user_id>[0-9]+)/$', views.account, name='account'),
    ]
    Fichier du lien computes (posant problème) :
    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
     
    from django.conf.urls import url
    from storages.views import storages, storage, get_volumes
    from networks.views import networks, network
    from secrets.views import secrets
    from create.views import create_instance
    from interfaces.views import interfaces, interface
    from computes.views import overview, compute_graph, computes, get_compute_disk_buses
    from instances.views import instances
    from nwfilters.views import nwfilter, nwfilters
     
    urlpatterns = [
        url(r'^/', computes, name='computes'),
        url(r'^(?P<compute_id>[0-9]+)/$', overview, name='overview'),
        url(r'^(?P<compute_id>[0-9]+)/statistics$', compute_graph, name='compute_graph'),
        url(r'^(?P<compute_id>[0-9]+)/instances/$', instances, name='instances'),
        url(r'^(?P<compute_id>[0-9]+)/storages/$', storages, name='storages'),
        url(r'^(?P<compute_id>[0-9]+)/storage/(?P<pool>[\w\-\.\/]+)/volumes$', get_volumes, name='volumes'),
        url(r'^(?P<compute_id>[0-9]+)/storage/(?P<pool>[\w\-\.\/]+)/$', storage, name='storage'),
        url(r'^(?P<compute_id>[0-9]+)/networks/$', networks, name='networks'),
        url(r'^(?P<compute_id>[0-9]+)/network/(?P<pool>[\w\-\.]+)/$', network, name='network'),
        url(r'^(?P<compute_id>[0-9]+)/interfaces/$', interfaces, name='interfaces'),
        url(r'^(?P<compute_id>[0-9]+)/interface/(?P<iface>[\w\-\.\:]+)/$', interface, name='interface'),
        url(r'^(?P<compute_id>[0-9]+)/nwfilters/$', nwfilters, name='nwfilters'),
        url(r'^(?P<compute_id>[0-9]+)/nwfilter/(?P<nwfltr>[\w\-\.\:]+)/$', nwfilter, name='nwfilter'),
        url(r'^(?P<compute_id>[0-9]+)/secrets/$', secrets, name='secrets'),
        url(r'^(?P<compute_id>[0-9]+)/create/$', create_instance, name='create_instance'),
        url(r'^(?P<compute_id>[0-9]+)/disk/(?P<disk>[\w\-\.\/]+)/buses$', get_compute_disk_buses, name='buses'),
    ]
    Par contre, j'ai fait une autre constatation :
    lien fonctionnel : https://srv1.local/accounts/
    lien posant problème : https://srv1.local/computes//

    En faisant un appel normal (sans reverseproxyà par http://srv1.local:8000/computes// ça fonctionne.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 688
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Par contre, j'ai fait une autre constatation :
    lien fonctionnel : https://srv1.local/accounts/
    lien posant problème : https://srv1.local/computes//

    En faisant un appel normal (sans reverseproxyà par http://srv1.local:8000/computes// ça fonctionne.
    Est ce que çà serait comme si le reverse proxy supprimait un des / à la fin de: http://srv1.local:8000/computes// ?

    Un bout de chemin vide (//) me semble étrange... mais je n'aurais pas trop de temps pour travailler sérieusement la dessus avant la semaine prochaine.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 183
    Par défaut
    J'ai pas été plus loin pour le moment, mais je pense que c'est cette histoire de double // . Je présume que c'est un bug de génération d'URL généré par le créateur de l'appli qui ne pose pas de prob. en fonctionnement normal (sans ajout du reverse proxy).

    Pas eu le temps d'aller plus loin non plus pour le moment.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/01/2019, 15h58
  2. Problème affichage dans un TextView avec ViewPager
    Par Paul75 dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 14/10/2017, 12h28
  3. [WS 2008 R2] publication RDWeb avec la passerelle TS avec reverse proxy
    Par polux-01 dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 23/01/2011, 20h55
  4. [JDIC] Ouverture d'une url dans un navigateur avec jdic
    Par CyberSlan dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 11/08/2008, 08h33
  5. Passer une URL dans un form avec POST
    Par dldstyle dans le forum Langage
    Réponses: 5
    Dernier message: 30/04/2006, 20h09

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