J'ai un script qui génère un rapport quotidien que je veux servir au soi-disant grand public. Le problème est que je ne veux pas ajouter à mes maux de tête la maintenance d'un serveur HTTP (par exemple Apache) avec toutes les configurations et les implications de sécurité.
Existe-t-il une solution simple et simple pour servir une petite page HTML sans avoir à configurer un serveur HTTP complet?
Essayez SimpleHTTPServer :
python -m SimpleHTTPServer
# or the Python 3 equivalent
python3 -m http.server
Il devrait servir tout ce qui se trouve dans CWD (par exemple index.html) à http://0.0.0.0:80 .
Il y a une grande liste de one-liners de serveur statique http :
Pour figurer sur cette liste, une solution doit:
- servir des fichiers statiques en utilisant votre répertoire actuel (ou un répertoire spécifié) comme racine du serveur
- pouvoir être exécuté avec une seule commande d'une seule ligne (les dépendances sont bien si elles sont une seule fois)
- servir les types de fichiers de base (html, css, js, images) avec les types mime appropriés, ne nécessite aucune configuration (à partir de fichiers ou autre) au-delà de la commande elle-même (pas de serveurs spécifiques au framework, etc.)
- doit s'exécuter, ou avoir un mode où il peut s'exécuter, au premier plan (c'est-à-dire pas de démons)
Par exemple:
twistd -n web -p 8000 --path .
Erlang :
erl -s inets -eval 'inets:start(httpd,[{server_name,"NAME"},{document_root, "."},{server_root, "."},{port, 8000},{mime_types,[{"html","text/html"},{"htm","text/html"},{"js","text/javascript"},{"css","text/css"},{"gif","image/gif"},{"jpg","image/jpeg"},{"jpeg","image/jpeg"},{"png","image/png"}]}]).'
cpan Plack
plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");' -p 8000
webfsd -F -p 8000
Ruby -run -ehttpd . -p8000
Utilisation node.js
, rapide et léger.
Ou
utilisez simplement la commande nc
netcat simple pour démarrer un serveur Web rapide sur un port et servir le contenu d'un fichier, y compris les en-têtes de réponse du serveur.
Référence de Wikipedia:
{ echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat some.file; } | nc -l -p 8080
{ echo -ne "HTTP/1.0 200 OK\r\nContent-Length: $(wc -c <some.file)\r\n\r\n"; cat some.file; } | nc -l -p 8080
Depuis la version 5.4.0 PHP possède également un serveur web intégré :
php -S localhost:8000
Vous pouvez spécifier le répertoire de documents du serveur Web avec -t
, par exemple:
php -S localhost:8000 -t /var/lib/www
Si vous souhaitez pouvoir accéder au serveur via le réseau, alors:
php -S 0.0.0.0:8000 -t /var/lib/www
Le nœud possède un module serveur HTTP simple, rapide et léger. À installer:
Sudo npm install http-server -g
(En supposant que vous avez déjà installé node
et npm
.)
Pour l'exécuter, en utilisant le répertoire courant comme racine du site Web:
http-server
Cela crée un serveur sur http://0.0.0.0:8080/
.
Essayez d'utiliser SimpleHTTPServer
en Python.
mkdir ~/public_html
command_to_generate_output > ~/public_html/output.txt
(cd ~/public_html; python -c 'import SimpleHTTPServer,BaseHTTPServer; BaseHTTPServer.HTTPServer(("", 8080), SimpleHTTPServer.SimpleHTTPRequestHandler).serve_forever()')
Les deux premières lignes sont configurées pour le serveur Web. La dernière ligne crée un simple serveur Web, ouvert sur le port 8080, qui ne sert que les fichiers de ~/public_html
. Si un seul fichier se trouve dans ce répertoire, seul celui-ci est exposé: http://localhost:8080/output.txt
.
Simple Ruby un liner pour servir un répertoire:
Ruby -run -e httpd . -p 8080
Vous pouvez vous reporter sur xinetd . Placez le fichier de configuration suivant dans /etc/xinetd.d/ et service xinetd reload :
service http
{
flags = REUSE IPv4
protocol = tcp
socket_type = stream
port = 80
wait = no
user = nobody
server = /bin/echo
server_args = -e HTTP/1.0 301 Moved Permanently\nContent-Length: 0\nLocation: https://goo.gl/\n\n
disable = no
}
Fonctionne à mes fins de redirection:
# wget 127.0.0.1
--2016-04-04 22:56:20-- http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://goo.gl/ [following]
...
Une simple correction/amélioration d'une réponse votée légèrement injustement (à mon humble avis) pourrait également fonctionner. Configurons d'abord le fichier html ...
echo '<html><head><title>My Test File</title></head><body><h1>OK!</h1></body></html>' > my_file.html
(Merci à Steve Folly d'avoir attrapé ma faute de frappe dans le code HTML ci-dessus. Corrigé.)
Maintenant, vous pouvez le servir avec ce one-liner:
while true; do echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n" | cat - my_file.html | nc -l -p 8080; done
Cette idée de base se prête à d'autres astuces qui pourraient fonctionner pour vous via d'autres cat
ou des idées de sous-shell telles que:
while true; do echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nI think the date is $(date), Have a good day!" | nc -l -p 8080; done
./devd -o -a -P devd:devd .
Oldschool Ruby WEBrick Serveur HTTP:
#!/usr/bin/env Ruby
require 'webrick'
server = WEBrick::HTTPServer.new(:Port => 8000,
:DocumentRoot => '~/webrickroot')
# stop server with Ctrl-C
trap('INT') { server.stop }
server.start
Assurez-vous de modifier le DocumentRoot
pour votre configuration. Voir aussi this .
Une autre option serait d'installer lighttpd. Voici les étapes suggérées pour installer lighttpd sur un Unbuntu 12.04 LTS.
apt-get update
apt-get upgrade --show-upgraded
apt-get install lighttpd
ifconfig
http://[your-ip-address]:80
/etc/lighttpd/lighttpd.conf (Edit to add server.port)
server.port = "8080"
Remarque: Documentroot est l'endroit où tous les fichiers accessibles sur le Web seront des emplacements. L'emplacement est/var/wwww
L'étape ci-dessus va installer un serveur Web lighttpd de base. Pour plus d'informations, reportez-vous aux références suivantes
Références:
Exemple simple de netcat pour mettre en script bash:
while true ; do nc -l 80 <index.html ; done
essayez caddy
curl https://getcaddy.com | bash
servir le contenu de/var/www caddy -root /var/www "browse"
vous trouvez maintenant le serveur à http: // localhost: 2015
Pure bash: n serveur web dans un script Shell .
De plus, vous aurez besoin de xinetd (je crois disponible dans n'importe quelle distribution) pour écouter le port et exécuter le script si nécessaire, vous n'avez donc pas à coder la pile tcp, etc. dans bash.
SFK mérite d'être mentionné ici
http://stahlworks.com/dev/swiss-file-knife.html
un excellent outil polyvalent sans dépendances
disponible en versions deb et rpm
sfk httpserv -port 1234
servira le répertoire actuel
sfk httpserv -port 1234 -rw
permettra également le téléchargement de fichiers
J'ai utilisé ces instructions pour installer un serveur Web sur ma machine CentOS sans avoir à utiliser Sudo ou à toucher à aucun fichier système:
Premier nœud d'installation:
$ cd ~
$ wget https://nodejs.org/download/release/latest/node-v8.6.0-linux-x64.tar.gz
$ tar node-v8.6.0-linux-x64.tar.gz
puis installez le serveur http:
$ export PATH=~/node-v8.6.0-linux-x64/bin:$PATH
$ npm install http-server
puis exécutez le serveur http sur le port 12321:
$ ~/node-v8.6.0-linux-x64/bin/node_modules/http-server/bin/http-server -p 12321
J'ai un peu amélioré la solution nc
pour qu'elle:
filename=
indice,/tmp/serveFile-$PORT
afin que vous puissiez le tuer facilement plus tard..
#!/bin/bash
FILE=$1;
if [ "$FILE" == "" ] ; then echo "Usage: $0 <file-to-serve> [<port:7979>]"; exit; fi
PORT=${2:-7979}
echo Serving $FILE at $PORT, PID: $$
echo $$ > /tmp/serveFilePID-$PORT
while true; do
{ echo -ne "HTTP/1.0 200 OK\r\nContent-Length: $(wc -c <$FILE)\r\nContent-Disposition: inline; filename=\"$(basename $FILE)\"\r\n\r\n"; cat $FILE; } | nc -l $PORT
CODE=$?
#echo "Code: $CODE";
if [ $CODE -gt 128 ] ; then break; fi;
done;
rm /tmp/serveFilePID-$PORT
On pourrait également utiliser nc -k -l ...
mais de cette façon vous pouvez