いわゆる一般の人々に提供したい日次レポートを生成するスクリプトがあります。問題は、すべての構成とセキュリティに影響を与えるHTTPサーバー(Apacheなど)のメンテナンスに頭を悩ませたくないことです。
本格的なHTTPサーバーを構成する手間をかけずに、1つの小さなHTMLページを提供するための完全にシンプルなソリューションはありますか?
試してみてください SimpleHTTPServer :
python -m SimpleHTTPServer
# or the Python 3 equivalent
python3 -m http.server
[〜#〜] cwd [〜#〜] (例:index.html)の内容は http://0.0.0.0:80 で提供されます。
http static server one-linersの大きなリスト があります:
このリストを取得するには、ソリューションは次の条件を満たす必要があります。
- 現在のディレクトリ(または指定したディレクトリ)をサーバールートとして使用して静的ファイルを提供する
- 単一の1行コマンドで実行できる(1回限りのものであれば依存関係は問題ありません)
- 基本的なファイルタイプ(html、css、js、画像)を適切なMIMEタイプで提供し、コマンド自体(フレームワーク固有のサーバーなど)以外の設定(ファイルなどから)を必要としない
- フォアグラウンドで実行するか、実行可能なモードにする必要があります(つまり、デーモンはありません)。
例えば:
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
使用する 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
バージョン5.4.0以降PHPには 組み込みのWebサーバー)もあります :
php -S localhost:8000
-t
を使用して、Webサーバーのドキュメントディレクトリを指定できます。次に例を示します。
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
がすでにインストールされていると仮定します。)
実行するには、現在のディレクトリをWebサイトのルートとして使用します。
http-server
これにより、http://0.0.0.0:8080/
にサーバーが作成されます。
Pythonで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()')
最初の2行はWebサーバー用にセットアップされています。最後の行は、ポート8080で開かれたシンプルなWebサーバーを作成し、~/public_html
からのファイルのみを提供します。そのディレクトリにファイルが1つしかない場合は、そのファイルのみが公開されます:http://localhost:8080/output.txt
。
単純なRubyディレクトリを提供する1つのライナー:
Ruby -run -e httpd . -p 8080
xinetd に戻ることができます。次の構成ファイルを/etc/xinetd.d/および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
}
私のリダイレクト目的で機能します:
# 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]
...
わずかに不公平な(imho)の反対票を投じた回答に対する単純な修正/拡張も機能する可能性があります。最初にhtmlファイルを設定しましょう...
echo '<html><head><title>My Test File</title></head><body><h1>OK!</h1></body></html>' > my_file.html
(上記のHTMLのタイプミスを見つけてくれたSteve Follyに感謝します。修正されました。)
これで、このワンライナーでそれを提供できます:
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
./devd -o -a -P devd:devd .
別のオプションは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サーバーをインストールします。詳細については、次のリファレンスを参照してください
参照:
Bashスクリプトに入れる簡単なnetcatの例:
while true ; do nc -l 80 <index.html ; done
キャディを試す
curl https://getcaddy.com | bash
/ var/wwwからコンテンツを提供するcaddy -root /var/www "browse"
現在、サーバーは http:// localhost:2015 にあります
純粋なbash: シェルスクリプト内のWebサーバー 。
また、ポートをリッスンし、必要に応じてスクリプトを実行するには、xinetd(どのディストリビューションでも利用できると思います)が必要になるため、tashスタックなどをbashでコーディングする必要はありません。
ここで言及する価値のあるSFK
http://stahlworks.com/dev/swiss-file-knife.html
依存関係のない優れた多目的ツール
debとrpmの両方のフレーバーで利用可能
sfk httpserv -port 1234
現在のディレクトリを提供します
sfk httpserv -port 1234 -rw
ファイルのアップロードも可能になります
これらの手順を使用して、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 ...
を使用することもできますが、この方法で