소위 일반 대중에게 제공하려는 일일 보고서를 생성하는 스크립트가 있습니다. 문제는 모든 구성과 보안 영향으로 HTTP 서버 (예 : Apache)의 두통 유지 관리에 추가하고 싶지 않다는 것입니다.
완전한 HTTP 서버를 구성하지 않고도 하나의 작은 HTML 페이지를 제공하는 데 도움이되는 간단한 솔루션이 있습니까?
소위 일반 대중에게 제공하려는 일일 보고서를 생성하는 스크립트가 있습니다. 문제는 모든 구성과 보안 영향으로 HTTP 서버 (예 : Apache)의 두통 유지 관리에 추가하고 싶지 않다는 것입니다.
완전한 HTTP 서버를 구성하지 않고도 하나의 작은 HTML 페이지를 제공하는 데 도움이되는 간단한 솔루션이 있습니까?
답변:
SimpleHTTPServer를 사용해보십시오 :
python -m SimpleHTTPServer
# or the Python 3 equivalent
python3 -m http.server
CWD (예 : index.html)의 http://0.0.0.0:8000 에있는 모든 것을 제공해야합니다 .
python3 -m http.server 1337
. 내가 말할 수있는 한 바인딩 할 IP를 지정할 수 없습니다. 참고 : 포트 80을 들으려면 루트 권한이 있어야합니다.sudo python3 -m http.server 80
twistd -n web -p 8000 --path .
python -m SimpleHTTPServer 3000
http 정적 서버 one-liners 의 큰 목록 이 있습니다 .
이 목록을 얻으려면 솔루션이 다음을 수행해야합니다.
- 현재 디렉토리 (또는 지정된 디렉토리)를 서버 루트로 사용하여 정적 파일 제공
- 한 줄 명령으로 실행할 수 있습니다 (한 번만 사용하면 종속성이 좋습니다)
- 적절한 MIME 유형으로 기본 파일 유형 (html, css, js, 이미지)을 제공하고, 명령 자체 이외의 구성은 필요하지 않습니다 (프레임 워크 별 서버 등이 아님).
- 포 그라운드에서 실행되거나 실행 가능한 모드가 있어야합니다 (예 : 데몬 없음)
예를 들면 다음과 같습니다.
twistd -n web -p 8000 --path .
얼랭 :
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
node.js
빠르고 가볍고 사용하십시오 .
또는
간단한 nc
netcat 명령을 사용 하여 포트에서 빠른 웹 서버를 시작하고 서버 응답 헤더를 포함한 파일의 내용을 제공하십시오.
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
버전 5.4.0부터 PHP에는 내장 웹 서버가 있습니다 .
php -S localhost:8000
다음과 같이 웹 서버의 문서 디렉토리를 지정할 수 있습니다 -t
.
php -S localhost:8000 -t /var/lib/www
네트워크를 통해 서버에 액세스하려면 다음을 수행하십시오.
php -S 0.0.0.0:8000 -t /var/lib/www
노드에는 간단하고 빠르고 가벼운 HTTP 서버 모듈이 있습니다. 설치하기 위해서:
sudo npm install http-server -g
(당신이 가정 node
하고 npm
이미 설치되어 있어야합니다.)
현재 디렉토리를 웹 사이트 루트로 사용하여 실행하려면 다음을 수행하십시오.
http-server
에 서버가 생성됩니다 http://0.0.0.0:8080/
.
npm install -D http-server
프로젝트 디렉토리 안에서 실행 한 다음 package.json
파일에 다음 줄을 추가하면 됩니다. "scripts": { "build": "webpack && cd src/public && http-server" },
이제 npm run build
기본적으로 포트 8080을 수신하여 HTTP 서버를 시작하기 위해 프로젝트 디렉토리에서 실행 하면됩니다.
python3 -m http.server
"를 시도했지만 단일 스레드이며 한 번에 하나의 클라이언트 만 다운로드 할 수 있으며 다른 클라이언트는 기다려야합니다. Node.js가있는이 솔루션은 Node의 비동기 특성으로 인해 더 잘 작동합니다. 여러 사람과 파일을 공유하려면 이것을 사용하십시오.
SimpleHTTPServer
파이썬에서 사용해보십시오 .
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()')
처음 두 줄은 웹 서버에 설정됩니다. 마지막 행은 포트 8080에서 열린 간단한 웹 서버를 작성합니다.이 서버는의 파일 만 제공합니다 ~/public_html
. 해당 디렉토리에 파일이 하나만 있으면 노출 http://localhost:8080/output.txt
됩니다..
.py
파일 에 붙여 넣은 다음 실행하십시오 python
(또는 실행 가능하게하십시오). python 2.x 인터프리터로 실행해야합니다.
xinetd에서 다시 피기 할 수 있습니다 . 다음 설정 파일을 /etc/xinetd.d/에 넣고 xinetd 서비스를 다시로드하십시오 :
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
}
내 리디렉션 목적으로 작동합니다.
# 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]
...
또 다른 옵션은 lighttpd를 설치하는 것입니다. 다음은 Unbuntu 12.04 LTS에 lighttpd를 설치하는 단계입니다.
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"
참고 : Documentroot는 모든 웹 액세스 가능 파일이있는 곳입니다. 위치는 / var / wwww입니다
위의 단계는 기본 lighttpd 웹 서버를 설치합니다. 자세한 내용은 다음 참조를 참조하십시오
참고 문헌 :
./devd -o -a -P devd:devd .
약간 불공평 한 (imho) 다운 투표 답변에 대한 간단한 수정 / 향상도 효과가있을 수 있습니다. 먼저 html 파일을 설정합시다 ...
echo '<html><head><title>My Test File</title></head><body><hi>OK!</h1></body></html>' > my_file.html
이제이 단일 라이너로 제공 할 수 있습니다.
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
이 기본 아이디어는 cat
다음과 같은 다른 아이디어 나 서브 쉘 아이디어 를 통해 다른 트릭에 적합합니다 .
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
bash 스크립트에 넣는 간단한 netcat 예제 :
while true ; do nc -l 80 <index.html ; done
while [ 1=1 ] ; do echo "TEST" | nc -l 80; done
이동하면 실제로 내용을 반환합니다. 그래도 루트로해야했습니다. 따라서 매우 조잡한 방식으로 작업을 수행 할 수 있습니다. LAN의 다른 컴퓨터에서 my-hostnname.local로 이동하려고 시도했지만 작동했습니다.
여기에 언급 할 가치가있는 SFK
http://stahlworks.com/dev/swiss-file-knife.html
의존성이없는 우수한 다목적 도구
deb 및 rpm 맛 모두에서 사용 가능
sfk httpserv -port 1234
현재 디렉토리를 제공합니다
sfk httpserv -port 1234 -rw
파일 업로드도 허용합니다
순수 bash : 쉘 스크립트의 웹 서버 .
또한 포트를 수신하고 필요할 때 스크립트를 실행하려면 xinetd (모든 배포판에서 사용 가능하다고 생각)가 필요하므로 bash에서 tcp stack 등을 코딩 할 필요가 없습니다.
캐디를 시도
curl https://getcaddy.com | bash
/ var / www의 콘텐츠를 제공
caddy -root /var/www "browse"
이제 http : // localhost : 2015 에서 서버를 찾으십시오 .
이 지시 사항을 사용하여 sudo를 사용하거나 시스템 파일을 건드리지 않고 CentOS 머신에 웹 서버를 설치했습니다.
첫 번째 설치 노드 :
$ 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
그런 다음 http-server를 설치하십시오.
$ export PATH=~/node-v8.6.0-linux-x64/bin:$PATH
$ npm install http-server
그런 다음 포트 12321에서 http-server를 실행하십시오.
$ ~/node-v8.6.0-linux-x64/bin/node_modules/http-server/bin/http-server -p 12321
nc
솔루션을 조금 개선 했습니다.
filename=
힌트를 추가합니다./tmp/serveFile-$PORT
나중에 쉽게 죽일 수 있도록 PID를 저장합니다 ..
#!/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
하나도 사용할 수 nc -k -l ...
있지만 이런 식으로 할 수 있습니다