ワンライナーでWebサーバ

はじめに

ちょっとしたプログラムの動作確認で、Webサーバを起動したいときってありますよね。
そんな時、私はワンライナーで実行できるWebサーバを利用しています。


  • 環境:Windows10
  • 公開したいディレクトリに移動し、以下のコマンドを実行します。

Node.js

npx http-server -p 8080

参考資料
https://www.npmjs.com/package/http-serve

Golang

  • goexecインストール

    go get -u github.com/shurcooL/goexec
  • webサーバ実行

    goexec http.ListenAndServe(\":8080\",http.FileServer(http.Dir(\".\")))

参考資料
https://github.com/golang/go/wiki/WebAssembly

Python 3.x

python -m http.server 8081

参考資料
https://docs.python.org/ja/3/library/http.server.html

PHP

php -S localhost:8081

参考資料
https://www.php.net/manual/ja/features.commandline.webserver.php

nginx – ロードバランサで特定のエラーを別サーバに再送する設定

エラー、タイムアウト、500系のエラーを別サーバに再送する設定例です。


構成図

upstream webservers {
    server webserver1:443;
    server webserver2:443;
}
server {
・・・省略・・・
    location / {
        proxy_pass https://webservers;
        # POSTも転送する場合は non_idempotent を追加
        proxy_next_upstream error timeout http_500 http_502 http_503 non_idempotent;
    }
・・・省略・・・
}

nginxの配下でnodejsやgolangを動かす方法

nodejsやgolangは自分自身がWebサーバの機能も持ち合わせています。

それはそれで便利なのですが、それらのプログラムがフロントに立ってしまうと複数のプログラムを実行する場合は、その分ポートを開ける必要があります。

また、それが外部に公開するサービスだとしたら、443以外のポートにリクエストを送らなければならない仕様となり、利用者も扱いにくいです。

そのため、フロントに別のWebサーバを立てる必要があるかと思います。

mainserver.com
mainserver.com
https://mainserver.com/gosample
→http/port:8081へ転送
https://mainserver.com/gosample…
https://mainserver.com/nodesample
→http/port:8082へ転送
https://mainserver.com/nodesample…
Viewer does not support full SVG 1.1

上記のような構成でのnginx最小限の設定は以下の通りです。

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name mainserver.com;

    location /gosample/ {
        proxy_pass http://127.0.0.1:8081/;
    }

    location /nodesample/ {
        proxy_pass http://127.0.0.1:8082/;
    }
}

nginxのテキスト圧縮を有効にする

設定変更の前に

nginxの設定を変更する前にGoogleのPageSpeed Insightsでパフォーマンスを確認。

nginx設定内容

  • gzipon
  • gzip_types をコメントアウト

/etc/nginx/nginx.conf

http {
・・・
  gzip on;
  # 圧縮するファイルの種類を指定
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
・・・
}

nginx設定反映

# 設定ファイルチェック
nginx -t
# 設定ファイル再読み込み
nginx -s reload

nginx設定後の確認

改善結果をGoogleのPageSpeed Insightsで確認する。

nginxをリバースプロキシ兼ロードバランサにする設定

nginxをリバースプロキシ兼ロードバランサにする場合の設定を以下に記します。

サーバ構成イメージ

server1
server1
nginx
nginx
appserver1
appserver1
nginx(port:1111)
nginx(port:11…
appserver2
appserver2
nginx(port:2222)
nginx(port:22…
appserver3
appserver3
nginx(port:3333)
nginx(port:33…
https
https
http
http
http
http
http
http
Viewer does not support full SVG 1.1

server1のnginx設定


upstream backend {
    server appserver1:1111;
    server appserver2:2222;
    server appserver3:3333;
}

server {
・・・
    location / {
        # httpsで通信する場合は、https://backend
        proxy_pass http://backend; 
    }
・・・
}

appserver1の設定

server {
・・・
    # httpsの場合は listen 1111 ssl;
    listen 1111;
・・・
}