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

Autres langages pour le Web Discussion :

[uHTTPd] Configurer un mini serveur sous uHTTPd


Sujet :

Autres langages pour le Web

  1. #1
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 825
    Par défaut [uHTTPd] Configurer un mini serveur sous uHTTPd
    Salut à tous.

    Je suis en train de configurer mon routeur OpenWRT version 24.10.0, sous Raspberry Pi 4B. Pour tout ce qui est réseau, il me semble avoir réussi à le faire car j'obtiens bien l'internet sur mes deux bridges (br0, br1) et j'ai j'obtiens les adresses Ipv4 & IPv6 publiques fournies par SFR. Donc, tout va bien de ce coté là.

    J'ai besoin de simuler la box 8 SFR et c'est là que j'ai des problèmes car je ne connais pas "uHTTPd", le serveur WEB léger ou minimaliste. Voici le fichier de configuration "/etc/config/uhttpd" :
    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
    config uhttpd 'main'
    	list listen_http '0.0.0.0:80'
    	list listen_http '[::]:80'
    	list listen_https '0.0.0.0:443'
    	list listen_https '[::]:443'
    	option redirect_https '0'
    	option home '/www'
    	option rfc1918_filter '1'
    	option max_requests '3'
    	option max_connections '100'
    	option cert '/etc/uhttpd.crt'
    	option key '/etc/uhttpd.key'
    	option cgi_prefix '/cgi-bin'
    	list lua_prefix '/cgi-bin/luci=/usr/lib/lua/luci/sgi/uhttpd.lua'
    	option script_timeout '60'
    	option network_timeout '30'
    	option http_keepalive '20'
    	option tcp_keepalive '1'
    	option ubus_prefix '/ubus'
    
    config cert 'defaults'
    	option days '397'
    	option key_type 'ec'
    	option bits '2048'
    	option ec_curve 'P-256'
    	option country 'ZZ'
    	option state 'Somewhere'
    	option location 'Unknown'
    	option commonname 'OpenWrt'
    C'est la version d'origine, non modifié.

    Il existe déjà un répertoire /www" avec un sous répertoire /cgi-bin" contenant "LUCI". Pour simuler la BOX 8 SFR, j'ai créé le répertoire /www/api/1.0", afin d'y mettre les fichiers "*.xml" et un script a priori "cgi". Mon problème est que je sais le faire sous Apache, mais pas sous uHTTPd.

    Dans mon OpenWRT, j'ai créé deux bridges, l'un nommé br0 avec l'adresse 10.0.0.1 et l'autre nommé br1 avec l'adresse 192.168.1.1.

    Remarque: Je ne vais pas préfixer mes url par "http://" car je ne veux pas que cela apparaisse dans ce sujet comme des liens à cliquer.

    Je veux que uHTTPd interpréte cet url que voici : "192.168.1.1/api/1.0/?method=ftth.getInfo".
    Ce chemin "/api/1.0/" va devoir exécuter (sous apache, on parle de redirection) un script "cgi" qui va retourner le fichier qui se trouve dans le paramètre de "?method=...".

    Mon script "cgi" se nomme "gateway.cgi". Il a les droits "root", il est exécutable et il se trouve dans le répertoire "/www/cgi-bin". Si je tape dans google : "192.168.1.1/cgi-bin/gateway.cgi", il s'exécute, ce qui est correcte.

    Oui, mais voilà, je ne sais pas comment modifier le fichier de configuration uHTTPd afin que l'url "192.168.1.1/api/1.0/?method=ftth.getInfo" pointe vers le chemin du script cgi "/etc/cgi-bin/gateway.cgi" et s'excéute en retournant le contenu du fichier "/www/api/1.0/ftth.getInfo.xml".

    Il y a déjà un existant "LUCI" et j'aimerai avoir encore l'accès par le navigateur google.

    Voici le fichier "gateway.cgi" :
    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
    #!/bin/sh
    
    METHOD=$(echo "$QUERY_STRING" | sed -n 's/.*method=\([^&]*\).*/\1/p')
    
    case "$METHOD" in
    	ftth.getInfo)		FILE="ftth.xml"   ;;
    	lan.getHostsList)	FILE="lan.xml"    ;;
    	system.getInfo)		FILE="system.xml" ;;
    	tv.getInfo)			FILE="tv.xml"     ;;
    	usb.getInfo)		FILE="usb.xml"    ;;
    	wan.getInfo)		FILE="wan.xml"    ;;
    	*)
    		echo "Status: 404 Not Found"
    		echo "Content-type: text/html"
    		echo
    		echo "Method not found"
    		exit 0
    		;;
    esac
    
    echo "Content-type: application/xml"
    echo
    cat "/www/api/$FILE" 2>/dev/null || echo "XML file not found"
    Merci de m'avoir lu.
    Cordialement.
    Artemus24.
    @+

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 652
    Par défaut
    d'après les recherches que j'ai faites, uhttpd ne gère pas les redirections dans sa configuration.

    et il y a un message ici de quelqu'un qui a utiliser la configuration de la gestion d'erreur pour faire les redirections :
    https://stackoverflow.com/questions/...nswer-62099114
    l'idée est que le script d'erreur va analyser l'url et faire la redirection dans le code.

  3. #3
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 825
    Par défaut
    Salut Mathieu et merci pour ta participation.

    Je précise que je ne peux pas modifier l'url car je n'ai pas la main pour le faire. Le serveur web uHTTPd, en cgi, ne sait pas gérer les redirections et cela aurait été très utile. En fait, uHTTPd veut le nom du script cgi dans l'url. Et ce script cgi n'a pas besoin de s'écrire avec le suffixe ".cgi". Il peut s'écrire n'importe comment, même avec des chiffres. Voilà l'astuce que j'ai découvert et que j'ai appliqué avec succès dans mon serveur uHTTPd.

    Ainsi "192.168.1.1/api/1.0/?method=ftth.getInfo" va se décomposer en "/api" le répertoire, et "1.0" le script cgi présent dans ce même répertoire et non plus présent dans "/www/cgi-bin". J'ai ajouté uniquement ce paramètre dans le fichier "/etc/config/uhttpd" dans la section "config uhttpd 'main'" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    option cgi_prefix '/api/'
    Après l'avoir testé, ça fonctionne.

    Merci Mathieu, mais ta solution provoque quand même une erreur 404 qui peut perturber l'appelant, qui ici est mon décodeur TV Plus SFR.

    J'ai découvert que l'on peut créer un script LUA et que celui-ci peut interpréter l'url et exécuter le script cgi de nom : "/www/api/gateway.cgi". Voici le script LUA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function handle_request(env)
    	local query = env.QUERY_STRING or ""
    	local cmd = "QUERY_STRING='" .. query .. "' /www/api/gateway.cgi"
    	local handle = io.popen(cmd, "r")
    	local output = handle:read("*a")
    	handle:close()
    	return 200, output
    end
    Le code retour est bien 200, et il est important de l'avoir.
    Je dois aussi modifier le fichier "/etc/config/uhttpd" en ayant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    config uhttpd 'main'
    	option home '/www'
    	list lua_prefix '/api/1.0/'
    	option lua_handler '/www/api_router.lua'
    Et bien sûr, le script LUA se trouve dans le répertoire "/www" sous le nom "api_router.lua".
    Je n'ai pas testé cette solution car mon astuce fonctionne.

    Oui, je casse le fonctionnement de l'accès au paramétrage du routeur par "LUCI", mais de toute façon, je ne m'en servais pas.
    Et mon but est d'avoir accès au décodeur TV Plus SFR puisque celui-ci sera branché sur mon routeur OpenWRT.

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Processeur] Choix d'un processeur pour configuration PC/mini-serveur amd ou Intel
    Par Balbuzard dans le forum Composants
    Réponses: 1
    Dernier message: 19/12/2016, 07h49
  2. [PC Serveur] Configuration pour mini serveur de dev
    Par Freeman84 dans le forum Ordinateurs
    Réponses: 2
    Dernier message: 15/06/2011, 11h50
  3. Réponses: 3
    Dernier message: 19/05/2009, 16h38
  4. Configuration d'un serveur DHCP sous VMware
    Par parab dans le forum VMware
    Réponses: 1
    Dernier message: 08/05/2009, 15h59

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