概要
開発時 http サーバが欲しくなる以下のような状況について記載します。
- 静的htmlファイルなどを
file:///
を使わずブラウザで開きたい。 - CGI(php) をとりあえず動かしたい。
- リバースプロキシサーバ(nginx)をとりあえず動かしたい。
ここ最近数ヶ月のうちに、2つ目と3つ目の方法が必要になり、調べてました。せっかくなので記事化しておく。
対象環境
Linux。メジャーな distribution なら大差ないはず。
手段
静的htmlファイルなどを開くためのhttpサーバを立てる
python3
の http.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
の変更も忘れずに。
本番環境はちゃんとカプセル化しましょう。