#1 05/10/2010 22:04:21

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 8188

Site HTTP supplémentaire

Modération goundoulf : renommage du titre. Titre original : "site http supplémentaire"

Dans le cadre du test de ob4full en local, j'essaye d'avoir un autre site local géré aussi par le serveur lighttpd

Ma solution basique est de considérer que tous les appels se feront à partir d'une url de la forme

http://neufbox/xxxx/
et avec des pages htm ou des scripts .cgi contenus dans cgi-bin

physiquement j'ai stocké les pages et les scripts dans
/datas/httpd/xxxx/

Pour cela il faut modifier le fichier
/var/lighttpd.conf
avec le patch suivant

Code:

--- a/var/lighttpd.conf
+++ b/var/lighttpd.conf
@@ -3,7 +3,7 @@
 server.tag           = "Server"
 server.pid-file      = "/var/run/lighttpd.pid"
 server.errorlog      = "/var/log/lighttpd.log"
-server.modules       = ( "mod_fastcgi" )
+server.modules       = ( "mod_cgi","mod_fastcgi" )
 
 $HTTP["url"] =~ "^/api/" {
     fastcgi.server   = ( "/" =>
@@ -19,7 +19,7 @@
                        )
 }
 
-$HTTP["url"] !~ "^/(css|img|preview|js|api)/|/favicon\.ico$" {
+$HTTP["url"] !~ "^/(css|img|preview|js|api|xxxxx)/|/favicon\.ico$" {
     fastcgi.server   = ( "/" =>
                              ((
                                 "socket" => "/var/run/fastcgi.socket",
@@ -33,9 +33,19 @@
                        )
 }
 
+$HTTP["url"] =~ "^/xxxx/" {
+    server.document-root = "/datas/httpd/"
+}
+
+$HTTP["url"] =~ "^/xxxx/cgi-bin/" {
+   server.document-root = "/datas/httpd/"
+    cgi.assign = ( ".cgi" => "" )
+} 
+
 mimetype.assign      = (
                          ".css" => "text/css",
                          ".htc" => "text/x-component",
+                         ".htm" => "text/html",
                          ".js"  => "application/x-javascript",
                          ".png" => "image/png",
                          ".ico" => "image/x-icon"

Patch non fonctionnel à cause de la transformation tab en blanc

Pour avoir des scripts cgi il faut ajouter mod_cgi.so dans /opt/usr/lib et la charger au départ
cf  +server.modules       = ( "mod_cgi","mod_fastcgi" )

Pour que les url neufbox/xxxx/ ne soient pas traitées de façon standard ajout de la condition
+$HTTP["url"] !~ "^/(css|img|preview|js|api|xxxxx)/|/favicon\.ico$" {

Puis traitement des ces url
+$HTTP["url"] =~ "^/xxxx/" {
+    server.document-root = "/datas/httpd/"
+}
et des scripts associés
+$HTTP["url"] =~ "^/xxxx/cgi-bin/" {
+   server.document-root = "/datas/httpd/"
+    cgi.assign = ( ".cgi" => "" )
+}

et enfin ajout du type htm
+                         ".htm" => "text/html",

Pour ceux qui ont tout lu
le code du compteur de visites count.cgi (dans /datas/httpd/xxxx/cgi-bin   mod 755)
(ne pas oublier de créer le fichier /datas/httpd/xxxx/cgi-bin/count_file)

Code:

#!/bin/sh
num=`cat count_file`
num=$(expr $num + 1)
echo -e $num  > count_file
echo -e "Content-type : text/html\n\n";
echo -e "<HTML><HEAD><TITLE>Hello world</TITLE></HEAD>\n";
echo -e "<BODY>\n";
echo -e "<DIV ALIGN=right>\n";
echo -e $num Visiteurs"\n";
echo -e "</DIV>\n";
echo -e "</BODY></HTML>\n";

et son utilisation dans datas/httpd/xxxx/index/htm

Code:

<html>
<head>
<Title> Test</Title>
</head>
<Body>
D&eacute;but de page
<p>
<iframe SRC="/download/xxxx/count.cgi"
frameborder="0" width="130" height="20"
marginwidth="0" marginheigth="0" scrolling="no">
</iframe>
<p>
fin de page
</Body>
</html>

Pas tout à fait  ce que j'escomptais initialement à savoir un serveur régulier sur le port 80 et un supplémentaire sur le port 88

Dernière modification par SGDA (18/10/2010 08:59:15)


XP Pro/Fedora 19 (Schrödinger's cat)

Hors ligne

 

#2 05/10/2010 22:22:26

SergeK
Moddeur newbie
Date d'inscription: 16/09/2010
Messages: 42

Re: Site HTTP supplémentaire

Tu as redirigé le port 88 vers le 80? C'est ce que ça semble faire là.


NB4-SER-r0  ||  firmware OB4-FULL+USB-R2.1.6

Hors ligne

 

#3 05/10/2010 22:28:19

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 8188

Re: Site HTTP supplémentaire

ce n'était pas mon but
je souhaitais que sur le port 88 utiliser une autre arborescence

finalement j'ai triché en reprenant l'astuce d'fcgiopenbox4
http://www.neufbox4.org/forum/viewtopic … d=795#p795

rajouté download ici
$HTTP["url"] !~ "^/(css|img|preview|js|api|download)/|/favicon\.ico$" {

et la directive
$HTTP["url"] =~ "^/download/" {
    server.document-root = "/datas/httpd/"
}

http://192.168.1.1/download/index.htm
m'affiche bien
Coucou

Dernière modification par SGDA (05/10/2010 22:33:45)


XP Pro/Fedora 19 (Schrödinger's cat)

Hors ligne

 

#4 05/10/2010 22:37:18

SergeK
Moddeur newbie
Date d'inscription: 16/09/2010
Messages: 42

Re: Site HTTP supplémentaire

As tu accès à l'ensemble des règles iptables, ou peux tu avoir la liste des règles courantes avec iptables -nL ?

Edit: L'astuce que tu cites semble aussi permettre l'utilisation de ports différenciés, qui correspond plus à ce que tu semblais vouloir. Tu n'as pas essayé?

Dernière modification par SergeK (05/10/2010 22:54:55)


NB4-SER-r0  ||  firmware OB4-FULL+USB-R2.1.6

Hors ligne

 

#5 05/10/2010 22:45:06

fxmx86
Administrateur
Date d'inscription: 31/12/2007
Messages: 2871
Site web

Re: Site HTTP supplémentaire

le fichier sample.conf ne t'aide pas ? J'utilise l'équivalent pour mon wiki, cela fonctionne bien.
Tu veux faire quoi, précisément ?


Version NB4 modée :  OB4-FULL+USB-R2.1.6

Hors ligne

 

#6 05/10/2010 22:59:09

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 8188

Re: Site HTTP supplémentaire

je suis sur en local. Ton fichier est conçu pour un site sur le wan

In fine je voulais tester mon compteur de visite compilé ...donc un exécutable C placé dans cgi-bin
Il va falloir que je rajoute mod_cgi.so

rajouté mod_cgi.so dans /opt/usr/lib
et mon dernier lighttpd.conf

Code:

server.document-root = "/var/www-docroot/"
server.port          = 80
server.tag           = "Server"
server.pid-file      = "/var/run/lighttpd.pid"
server.errorlog      = "/var/log/lighttpd.log"
server.modules       = ( "mod_fastcgi" )
server.modules       += ( "mod_cgi" )

$HTTP["url"] =~ "^/api/" {
    fastcgi.server   = ( "/" =>
                             ((
                                "socket" => "/var/run/api.socket",
                                "check-local" => "disable",
                                "bin-path" => "/www/fcgiroot/apid",
                                "min-procs" => 1,
                                "max-procs" => 1,
                                "max-load-per-proc" => 4,
                                "idle-timeout" => 20
                             ))
                       )
}

$HTTP["url"] !~ "^/(css|img|preview|js|api|download)/|/favicon\.ico$" {
    fastcgi.server   = ( "/" =>
                             ((
                                "socket" => "/var/run/fastcgi.socket",
                                "check-local" => "disable",
                                "bin-path" => "/www/fcgiroot/fastcgi",
                                "min-procs" => 1,
                                "max-procs" => 1,
                                "max-load-per-proc" => 4,
                                "idle-timeout" => 20
                             ))
                       )
}

$HTTP["url"] =~ "^/download/" {
    server.document-root = "/datas/httpd/"
    $HTTP["url"] =~ "^/cgi-bin/" {
          cgi.assign = ( ".sh" => "" )
            }
            
}


mimetype.assign      = (
                         ".css" => "text/css",
                         ".htc" => "text/x-component",
                         ".htm" => "text/html",
                         ".js"  => "application/x-javascript",
                         ".png" => "image/png",
                         ".ico" => "image/x-icon"
                       )

la page /download/index/htm

Code:

<html>
<head>
<Title> Test</Title>
</head>
<Body>
coucou
 <IMG SRC="/cgi-bin/nph-count.sh?width=5&link=/download/index.htm">
</Body>
</html>

mis dans /data/httpd/cgi-bin   nph-count.sh  (mêm si c'est un binaire C)

mais la commande est interceptée par fast_cgi cf /var/log/lighttpd.log

Code:

Jan  1 03:17:08 nb4 fastcgi[4806]: in src/ewf_page.c:0084:ewf_page_find - uri '/cgi-bin/nph-count.sh?width=5&link=/download/index.htm'
Jan  1 03:17:08 nb4 fastcgi[4806]: in src/ewf_page.c:0161:ewf_page_find - page 'cgi' not found

PS : la NB4 n'est pas à l'heure wink

Dernière modification par SGDA (05/10/2010 23:13:47)


XP Pro/Fedora 19 (Schrödinger's cat)

Hors ligne

 

#7 05/10/2010 23:27:58

SergeK
Moddeur newbie
Date d'inscription: 16/09/2010
Messages: 42

Re: Site HTTP supplémentaire

Modération goundoulf : utilisation de la balise code pour une meilleure lisibilité.

Changer l'ordre des déclarations comme mentionné dans le lien de ton post précédent?
En clair

Code:

$HTTP["url"] =~ "^/download/"

avant

Code:

$HTTP["url"] !~ "^/(css|img|preview|js|api|download)/|/favicon\.ico$"

NB4-SER-r0  ||  firmware OB4-FULL+USB-R2.1.6

Hors ligne

 

#8 06/10/2010 09:19:18

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 8188

Re: Site HTTP supplémentaire

Pas impossible que c'était Ok car j'ai pas utilisé le bon  exécutable  .. à suivre


XP Pro/Fedora 19 (Schrödinger's cat)

Hors ligne

 

#9 08/10/2010 11:55:18

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 8188

Re: Site HTTP supplémentaire

pas moyen de trouver les bonnes directives pour faire exécuter un script

Code:

server.document-root = "/var/www-docroot/"
server.port          = 80
server.tag           = "Server"
server.pid-file      = "/var/run/lighttpd.pid"
server.errorlog      = "/var/log/lighttpd.log"
server.modules       = ( "mod_cgi","mod_fastcgi" )

$HTTP["url"] =~ "^/api/" {
    fastcgi.server   = ( "/" =>
                             ((
                                "socket" => "/var/run/api.socket",
                                "check-local" => "disable",
                                "bin-path" => "/www/fcgiroot/apid",
                                "min-procs" => 1,
                                "max-procs" => 1,
                                "max-load-per-proc" => 4,
                                "idle-timeout" => 20
                             ))
                       )
}

$HTTP["url"] !~ "^/(css|img|preview|js|api|download)/|/favicon\.ico$" {
    fastcgi.server   = ( "/" =>
                             ((
                                "socket" => "/var/run/fastcgi.socket",
                                "check-local" => "disable",
                                "bin-path" => "/www/fcgiroot/fastcgi",
                                "min-procs" => 1,
                                "max-procs" => 1,
                                "max-load-per-proc" => 4,
                                "idle-timeout" => 20
                             ))
                       )
}

$HTTP["url"] =~ "^/download/" {
    server.document-root = "/datas/httpd/"
    $HTTP["url"] =~ "^/cgi-bin/" {
    cgi.assign = ( "" => "" )   
    }                           
}                               
                        
                                              
mimetype.assign      = (                              
                         ".css" => "text/css",        
                         ".htc" => "text/x-component",        
                         ".htm" => "text/html",               
                         ".js"  => "application/x-javascript",
                         ".png" => "image/png",               
                         ".ico" => "image/x-icon"

le script test.cgi

Code:

#!/bin/sh
echo "content-type : text/html\n\n";

echo "<HTML>";

echo "<HEAD>";

echo "<TITLE>Hello world</TITLE>";

echo "</HEAD>";

echo "<BODY>";

echo "Hello world!";

echo "</BODY>";

echo "</HTML>";

http://192.168.1.1/download/test.cgi ou http://192.168.1.1/download/cgi-bin/test.cgi
me propose seulement de télécharger le fichier (il est dans les répertoires /datas/httpd/download et /datas/httpd/download/cgi-bin  ... et exécutable)

Dernière modification par SGDA (08/10/2010 15:38:31)


XP Pro/Fedora 19 (Schrödinger's cat)

Hors ligne

 

#10 08/10/2010 15:05:15

icaunais
Moddeur aficionados
Date d'inscription: 21/08/2010
Messages: 141

Re: Site HTTP supplémentaire

C'est ton copier/coller qu'est pas bon ou tu as plusieurs lignes en double dans ton fichier de conf ?

Tu es certain que lighttpd charge le module cgi ?
Chez moi j'ai créé des liens vers les modules d'origine

Code:

root@nb4:/opt/usr/lib/lighttpd# ls -lrt
-rwxr-xr-x    1 root     root        24762 Aug 27 18:34 mod_cgi.so
-rwxr-xr-x    1 root     root         8436 Aug 27 18:35 mod_alias.so
-rwxr-xr-x    1 root     root         8035 Aug 27 18:35 mod_access.so
-rwxr-xr-x    1 root     root        28961 Aug 27 18:36 mod_auth.so
lrwxrwxrwx    1 root     root           34 Aug 28 18:16 mod_indexfile.so -> /usr/lib/lighttpd/mod_indexfile.so
lrwxrwxrwx    1 root     root           32 Aug 28 18:16 mod_fastcgi.so -> /usr/lib/lighttpd/mod_fastcgi.so
lrwxrwxrwx    1 root     root           35 Aug 28 18:17 mod_dirlisting.so -> /usr/lib/lighttpd/mod_dirlisting.so
lrwxrwxrwx    1 root     root           35 Aug 28 18:17 mod_staticfile.so -> /usr/lib/lighttpd/mod_staticfile.so

et je lance lighttpd avec le paramètre -m pour lui indiquer que les modules sont dans le répertoire /opt/....

Code:

lighttpd -f /var/lighttpd.conf -m /opt/usr/lib/lighttpd

NB4-MAIN-R3.2.12 + mini fo

Hors ligne

 

#11 08/10/2010 15:38:06

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 8188

Re: Site HTTP supplémentaire

oui mais copier coller corrigé. pour mod_cgi j'ai supposé que c'était Ok puisqu'il ne râle plus depuis que je l'ai copié dans /opt/usr/lib


XP Pro/Fedora 19 (Schrödinger's cat)

Hors ligne

 

#12 08/10/2010 17:02:42

goundoulf
Administrateur
Date d'inscription: 21/08/2007
Messages: 4587
Site web

Re: Site HTTP supplémentaire

l'erreur est ici je pense :

Code:

$HTTP["url"] =~ "^/download/" {
    server.document-root = "/datas/httpd/"
    $HTTP["url"] =~ "^/cgi-bin/" {
    cgi.assign = ( "" => "" )   
    }                           
}

l'url ne peut pas à la fois matcher "^/download/" ET "^/cgi-bin/"

tu peux essayer :

Code:

$HTTP["url"] =~ "^/cgi-bin/" {
    server.document-root = "/datas/httpd/"
    cgi.assign = ( "" => "" )                        
}

Hors ligne

 

#13 08/10/2010 17:06:32

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 8188

Re: Site HTTP supplémentaire

OK test à suivre

avec

Code:

$HTTP["url"] =~ "^/download/" {
    server.document-root = "/datas/httpd/"
}

$HTTP["url"] =~ "^/download/cgi-bin/" {
    server.document-root = "/datas/httpd/"
    cgi.assign = ( ".cgi" => "" )
}

http://192.168.1.1/download/cgi-bin/test.cgi
donne
500 - Internal Server Error
http://192.168.1.1/download/cgi-bin/test.sh
donne téléchargement du fichier dans download/cgi-bin

c'est OK en fait il y avait une erreur dans le script

Code:

echo "content-type : text/html";
echo ;

et non pas

Code:

echo "content-type : text/html\n\n";

c'est mon binaire de WWW-counter qui estKO (segmentation fault)

Dernière modification par SGDA (08/10/2010 21:44:29)


XP Pro/Fedora 19 (Schrödinger's cat)

Hors ligne

 

#14 08/10/2010 21:28:08

fxmx86
Administrateur
Date d'inscription: 31/12/2007
Messages: 2871
Site web

Re: Site HTTP supplémentaire

echo -e pour utiliser \n

Au fait, au lieu d'un binaire, il doit être possible d'utiliser directement le script pour compter les visites, ce serait plus light et souple, je trouve.

Et encore mieux serait de pouvoir rajouter derrière l'adresse du script, le nom de la page à lancer, genre : http://fxmx86.mine.nu/compteur.sh?index.htm

Bon, je dis ca mais j'y connais pas grand chose en dev HTML...


Version NB4 modée :  OB4-FULL+USB-R2.1.6

Hors ligne

 

#15 08/10/2010 21:47:38

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 8188

Re: Site HTTP supplémentaire

C'est ce que je pensais faire ...un script  ...tant pis pour le nombre en image


XP Pro/Fedora 19 (Schrödinger's cat)

Hors ligne

 

#16 09/10/2010 09:21:04

fxmx86
Administrateur
Date d'inscription: 31/12/2007
Messages: 2871
Site web

Re: Site HTTP supplémentaire

Pas très grave, les images...
Si ca ne marche pas avec lighttpd, tu peux aussi te servir du démon httpd de Busybox smile

Tiens, au fait, tout ce que tu fais pourrait servir de base à un mini site d'admin pour ob4-usb !


Version NB4 modée :  OB4-FULL+USB-R2.1.6

Hors ligne

 

#17 09/10/2010 12:52:17

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 8188

Re: Site HTTP supplémentaire

il suffit de ressortir ma version de fcgiopenbox4 qui n'était fondée que sur des scripts shell...mais sans la compréhension de silver

Dernière modification par SGDA (09/10/2010 12:52:56)


XP Pro/Fedora 19 (Schrödinger's cat)

Hors ligne

 

#18 09/10/2010 15:12:39

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 8188

Re: Site HTTP supplémentaire

Jeté un oeil dans ushare pour tranposer les commandes fam en inotify  ...
Je passe la main package inotifytools à dispo si quelqu'un est intéressé


XP Pro/Fedora 19 (Schrödinger's cat)

Hors ligne

 

#19 10/10/2010 11:41:06

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 8188

Re: Site HTTP supplémentaire

Trouvé une solution très simple pour le compteur en xbm ....mais c'est plus supporté dans les navigateurs sad

la solution image semble nécessaire car je n'ai pa vu comment un script cgi pouvait être utilisé pour générer dynamiquement une partie d'une page html car habituellement le script génère toute la page

Dernière modification par SGDA (10/10/2010 14:33:23)


XP Pro/Fedora 19 (Schrödinger's cat)

Hors ligne

 

#20 10/10/2010 14:29:03

clohr
Moddeur aficionados
Date d'inscription: 25/01/2008
Messages: 243

Re: Site HTTP supplémentaire

Même si tu l'appelle avec un <iframe> ?

Hors ligne

 

#21 10/10/2010 14:34:00

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 8188

Re: Site HTTP supplémentaire

Je suis preneur de la solution


XP Pro/Fedora 19 (Schrödinger's cat)

Hors ligne

 

#22 10/10/2010 15:28:51

clohr
Moddeur aficionados
Date d'inscription: 25/01/2008
Messages: 243

Re: Site HTTP supplémentaire

Par exemple : http://fr.selfhtml.org/html/frames/incorporees.htm
et dans le src du iframe tu mets l'url de ton cgi (qui affiche le compteur en texte)
Ca ne marcherait pas ça ?

Hors ligne

 

#23 10/10/2010 22:16:51

SGDA
Pachyderme
Lieu: 95170
Date d'inscription: 28/08/2007
Messages: 8188

Re: Site HTTP supplémentaire

Si voici
http://www.mabul.org/moe/up/10/10/10/j7520nt6.gif
index.htm

Code:

<html>
<head>
<Title> Test</Title>
</head>
<Body>
D&eacute;but de page
<p>
<iframe SRC="/download/cgi-bin/test.cgi"
frameborder="0" width="50" height="20"
marginwidth="0" marginheigth="0" scrolling="no"
>
</iframe>
Visiteurs
<p>
fin de page
</Body>
</html>

test.cgi

Code:

#!/bin/sh
num=`cat count_file`
num=$(expr $num + 1)
echo -e $num  > count_file
echo -e "Content-type : text/html\n\n";
echo -e "<HTML><HEAD><TITLE>Hello world</TITLE></HEAD>\n";
echo -e "<BODY>\n";
echo -e "<DIV ALIGN=right>\n";
echo -e $num "\n";
echo -e "</DIV>\n";
echo -e "</BODY></HTML>\n";

XP Pro/Fedora 19 (Schrödinger's cat)

Hors ligne

 

#24 11/10/2010 09:55:30

goundoulf
Administrateur
Date d'inscription: 21/08/2007
Messages: 4587
Site web

Re: Site HTTP supplémentaire

SGDA a écrit:

c'est mon binaire de WWW-counter qui est KO (segmentation fault)

oui du coup tu n'as pas le droit à un segfault, sinon erreur 500 direct smile

Hors ligne

 

#25 11/10/2010 09:58:40

goundoulf
Administrateur
Date d'inscription: 21/08/2007
Messages: 4587
Site web

Re: Site HTTP supplémentaire

SGDA a écrit:

la solution image semble nécessaire car je n'ai pa vu comment un script cgi pouvait être utilisé pour générer dynamiquement une partie d'une page html car habituellement le script génère toute la page

si c'est possible, notamment en JavaScript (la "nouvelle" mode Ajax) de mettre à jour le DOM de la page courante

Hors ligne

 

Pied de page des forums