Sim, nweb.
Pode ser encontrado aqui: nweb.c
(anteriormente em ibm.com )
Para compilar o nweb.c:
gcc -O -DLINUX nweb.c -o nweb
Eu tenho um script que gera um relatório diário que desejo veicular ao chamado público geral. O problema é que eu não quero adicionar à minha manutenção dores de cabeça de um servidor HTTP (por exemplo, Apache) com todas as configurações e implicações de segurança.
Existe uma solução simples para servir uma pequena página HTML sem o esforço de configurar um servidor HTTP completo?
Tente SimpleHTTPServer :
python -m SimpleHTTPServer
# or the Python 3 equivalent
python3 -m http.server
Deverá servir o que estiver no CWD (por exemplo, index.html) em link .
Use node.js
, rápido e leve.
Ou
use apenas o comando nc
netcat simples para iniciar um servidor da web rápido em uma porta e exibir o conteúdo de um arquivo, incluindo os cabeçalhos de resposta do servidor.
Referência da 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
Existe uma Grande lista de one-liners de servidores estáticos :
To get on this list, a solution must:
- serve static files using your current directory (or a specified directory) as the server root
- be able to be run with a single, one line command (dependencies are fine if they're a one-time thing)
- serve basic file types (html, css, js, images) with proper mime types, require no configuration (from files or otherwise) beyond the command itself (no framework-specific servers, etc)
- must run, or have a mode where it can run, in the foreground (i.e. no daemons)
Por exemplo:
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
Desde a versão 5.4.0, o PHP também possui um servidor da Web interno :
php -S localhost:8000
Você pode especificar o diretório de documentos do servidor web com -t
, por exemplo:
php -S localhost:8000 -t /var/lib/www
Se você quiser acessar o servidor pela rede, então:
php -S 0.0.0.0:8000 -t /var/lib/www
O nó tem um módulo de servidor HTTP simples, rápido e leve. Para instalar:
sudo npm install http-server -g
(Supondo que você tenha node
e npm
já instalado.)
Para executá-lo, usando o diretório atual como a raiz do site:
http-server
Isso cria um servidor em http://0.0.0.0:8080/
.
Tente usar SimpleHTTPServer
em 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()')
As duas primeiras linhas são configuradas para o servidor da web. A última linha cria um servidor da Web simples, aberto na porta 8080, que apenas exibe arquivos de ~/public_html
. Se apenas um arquivo estiver nesse diretório, apenas isso será exposto: http://localhost:8080/output.txt
.
Oldschool Ruby WEBrick HTTP servidor:
#!/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
Certifique-se de modificar o DocumentRoot
da sua configuração. Veja também este .
Outra opção seria instalar o lighttpd. A seguir estão as etapas sugeridas para instalar o lighttpd em um 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"
Nota: Documentroot é onde todos os arquivos acessíveis pela web serão colocados. A localização é / var / wwww
O passo acima irá instalar um servidor web lighttpd básico. Para mais informações, consulte as seguintes referências
Referências:
Simple Ruby um forro para servir um diretório:
ruby -run -e httpd . -p 8080
./devd -o -a -P devd:devd .
Você pode usar o xinetd . Coloque o seguinte arquivo de configuração em /etc/xinetd.d/ e 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
}
Funciona para meus propósitos de redirecionamento:
# 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]
...
Uma simples correção / melhoria para uma resposta levemente injusta também pode funcionar. Vamos configurar o arquivo html primeiro ...
echo '<html><head><title>My Test File</title></head><body><hi>OK!</h1></body></html>' > my_file.html
Agora você pode atendê-lo com este verso:
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
Essa ideia básica presta-se a outros truques que podem funcionar para você por meio de outras ideias de cat
ou subshell, como:
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
Espero que ajude a fazer algumas idéias ... Eu sei que algumas das respostas anteriores aqui ajudaram a me lembrar do poder do nc e ncat: -)
Exemplo simples de netcat para colocar no script bash:
while true ; do nc -l 80 <index.html ; done
SFK vale a pena mencionar aqui
uma excelente ferramenta multiuso sem dependências
disponível nos sabores deb e rpm
sfk httpserv -port 1234
servirá o diretório atual
sfk httpserv -port 1234 -rw
também permitirá o upload de arquivos
Pure bash: Um servidor da Web em um script de shell .
Além disso, você precisará do xinetd (acredito que esteja disponível em qualquer distribuição) para ouvir o port e executar o script quando necessário, para que você não precise codificar o tcp stack etc no bash.
Eu usei essas instruções para instalar um servidor da web na minha máquina do CentOS sem ter que usar o sudo ou tocar em nenhum arquivo de sistema:
Primeiro nó de instalação:
$ 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
em seguida, instale o http-server:
$ export PATH=~/node-v8.6.0-linux-x64/bin:$PATH
$ npm install http-server
execute http-server na porta 12321:
$ ~/node-v8.6.0-linux-x64/bin/node_modules/http-server/bin/http-server -p 12321
Eu melhorei um pouco a solução nc
para isso:
filename=
hint, /tmp/serveFile-$PORT
, para que você possa eliminá-lo mais tarde com facilidade.
#!/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
Também é possível usar nc -k -l ...
, mas dessa forma você pode
Tags command-line webserver html http