2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

httpサーバを手っ取り早く立てる

Posted at

概要

開発時 http サーバが欲しくなる以下のような状況について記載します。

  • 静的htmlファイルなどを file:/// を使わずブラウザで開きたい。
  • CGI(php) をとりあえず動かしたい。
  • リバースプロキシサーバ(nginx)をとりあえず動かしたい。

ここ最近数ヶ月のうちに、2つ目と3つ目の方法が必要になり、調べてました。せっかくなので記事化しておく。

対象環境

Linux。メジャーな distribution なら大差ないはず。

手段

静的htmlファイルなどを開くためのhttpサーバを立てる

python3http.server モジュールを使う。

$ python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

http://localhost:8000/ に接続。
index.html が無ければディレクトリ一覧も出るので便利。

CGI(php) をとりあえず動かしたい。

php が使える。

$ php -S 0.0.0.0:8000
[Sun Jul 25 18:52:46 2021] PHP 7.4.3 Development Server (http://0.0.0.0:8000) started

http://localhost:8000/ に接続。
ディレクトリ一覧は出せないので、一覧を自力で書くか、routerを定義する必要がある。

router の書き方については、以下の stackoverflow に書かれている回答が役に立ちました。

リバースプロキシサーバ(nginx)をとりあえず動かしたい

リバースプロキシサーバが必要になりました。仕方ないですね。docker で nginx を立てましょう。

まずは、最も単純な、8000 番ポートに nginx サーバを立てる方法。python3 -m http.server 8000 と大体同じ。

docker run --name my-nice-nginx --rm \
  -v $PWD:/usr/share/nginx/html:ro \
  -d -p 8000:80 nginx

終了するには、docker kill my-nice-nginx だけでok。--rm 付けていますし。

設定ファイルを書き換えるには、以下のように設定ファイルをマウントする。

docker run --name my-nice-nginx --rm \
  -v $PWD/nginx/html:/usr/share/nginx/html:ro \
  -v $PWD/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
  -v $PWD/nginx/conf.d:/etc/nginx/conf.d:ro \
  -v $PWD/nginx/log:/var/log/nginx/:rw \
  -d --net host nginx

ポートフォワーディングで(80から8000に変更するような)ポート変更の対応をすると、リバースプロキシとしてnginxを使いたいときに、dockerの設定が大変になる。
ここは --net host してしまって、nginx 側の設定でlistenするポートを置き換えると手を抜ける。conf.d/default.conf の変更も忘れずに。

本番環境はちゃんとカプセル化しましょう。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?