いわゆる一般大衆に提供したい日報を生成するスクリプトがあります。問題は、HTTPサーバー(Apacheなど)の頭痛の種のメンテナンスに、すべての構成とセキュリティの影響を追加したくないことです。
本格的なHTTPサーバーを構成する手間をかけずに1つの小さなHTMLページを提供するための非常にシンプルなソリューションはありますか?
いわゆる一般大衆に提供したい日報を生成するスクリプトがあります。問題は、HTTPサーバー(Apacheなど)の頭痛の種のメンテナンスに、すべての構成とセキュリティの影響を追加したくないことです。
本格的なHTTPサーバーを構成する手間をかけずに1つの小さなHTMLページを提供するための非常にシンプルなソリューションはありますか?
回答:
SimpleHTTPServerを試してください:
python -m SimpleHTTPServer
# or the Python 3 equivalent
python3 -m http.server
http://0.0.0.0:8000のCWD(たとえば、index.html)にあるものすべてを提供する必要があります。
python3 -m http.server 1337
。私が知る限り、バインドするIPを指定することはできません。注:ポート80をリッスンするには、root権限が必要です。例:sudo python3 -m http.server 80
twistd -n web -p 8000 --path .
--bind <address>
python 3.4で追加されました。
python -m SimpleHTTPServer 3000
http静的サーバーのワンライナーの大きなリストがあります:
このリストを取得するには、ソリューションで次のことを行う必要があります。
- 現在のディレクトリ(または指定されたディレクトリ)をサーバールートとして使用して静的ファイルを提供する
- 単一の1行のコマンドで実行できる(1回限りであれば依存関係は問題ありません)
- 基本的なファイルタイプ(html、css、js、images)を適切なMIMEタイプで提供し、コマンド自体を超えた構成(ファイルなど)を必要としません(フレームワーク固有のサーバーなどは不要)
- フォアグラウンドで実行するか、実行可能なモードにする必要があります(つまり、デーモンはありません)
例えば:
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コマンドを使用してポートでクイックWebサーバーを起動し、サーバー応答ヘッダーを含むファイルのコンテンツを提供するだけです。
ウィキペディアからの参照:
{ 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
Nodeには、シンプルで高速、軽量のHTTPサーバーモジュールがあります。インストールするには:
sudo npm install http-server -g
(あなたが持っていると仮定するnode
と、npm
すでにインストールされています。)
現在のディレクトリをWebサイトのルートとして使用して実行するには:
http-server
これにより、サーバーが作成されhttp://0.0.0.0:8080/
ます。
npm install -D http-server
プロジェクトディレクトリ内で実行し、次の行をpackage.json
ファイルに追加します。HTTPサーバーを起動するためにプロジェクトディレクトリで"scripts": { "build": "webpack && cd src/public && http-server" },
実行するだけでnpm run build
、デフォルトでポート8080でリッスンします。
python3 -m http.server
」を試しましたが、シングルスレッドで、一度にダウンロードできるクライアントは1つだけで、他のクライアントは待つ必要があります。Nodeの非同期の性質により、Node.jsを使用したこのソリューションはより適切に機能します。複数のユーザーとファイルを共有する場合は、これを使用します。
SimpleHTTPServer
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()')
最初の2行は、Webサーバー用にセットアップされています。最後の行は、ポート8080で開かれた単純なWebサーバーを作成します。このサーバーは、からのファイルのみを提供します~/public_html
。そのディレクトリにファイルが1つしかない場合、そのファイルのみが公開されますhttp://localhost:8080/output.txt
。
.py
ファイルに貼り付けてpython
から実行します(または実行可能にします)。python 2.xインタープリターで実行する必要があることに注意してください。
xinetdに便乗できます。次の構成ファイルを/etc/xinetd.d/に配置し、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
}
私のリダイレクト目的のために動作します:
# 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は、すべてのWebアクセス可能なファイルが配置される場所です。場所は/ var / wwwwです
上記の手順により、基本的なlighttpd Webサーバーがインストールされます。詳細については、次のリファレンスを参照してください
参照:
./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
キャディを試す
curl https://getcaddy.com | bash
/ var / wwwからコンテンツを提供する
caddy -root /var/www "browse"
今、あなたはhttp:// localhost:2015でサーバーを見つけます
caddy
ローカルディレクトリからだけで、モダンで安全なWebサーバーを楽しんでいます。
bashスクリプトを挿入する簡単なnetcatの例:
while true ; do nc -l 80 <index.html ; done
while [ 1=1 ] ; do echo "TEST" | nc -l 80; done
た-127.0.0.1に行くことは確かに内容を返します。私はルートとしてそれをしなければなりませんでした。だから非常に粗雑な方法で-それは仕事を成し遂げることができ、私はそれが好きです。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:シェルスクリプト内のWebサーバー。
また、ポートをリッスンし、必要なときにスクリプトを実行するには、xinetd(どのディストリビューションでも利用できると思います)が必要になるため、bashでtcpスタックなどをコーディングする必要はありません。
以下の手順を使用して、sudoを使用したり、システムファイルに触れたりすることなく、CentOSマシンにWebサーバーをインストールしました。
最初のインストールノード:
$ 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
後で簡単に削除できるようにします。。
#!/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 ...
が、この方法で