それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

nginx設定 で 直接HTMLを書き出す。echo モジュール。

2022-08-17 追記

return 200'message' を使ったほうがスッキリします → https://takuya-1st.hatenablog.jp/entry/2022/08/17/161838

echo モジュールでHTMLを応答する。

nginx設定 で 直接HTMLを書き出す。echo モジュール。

まるで、古(いにしえ)の技術のCGIのように、HTMLをecho で作成できる。

設定例

location /hello {
     default_type text/html;
     echo "<!DOCTYPE html><h1>It works.(nginx)</h1></html>";
 }                   

実行例

準備

この、nginxの location に記述したecho から直接レスポンスを返すには、echoモジュールが必要である。

echo モジュールは github で配布されている。(https://github.com/openresty/echo-nginx-module#echo)

ubuntu の場合、apt パッケージで提供されている

apt list libnginx-mod*
apt install libnginx-mod-http-echo

設定例

設定は、echoするだけでいい。ただし、octet-streamになってしまい、ブラウザでみるとダウンロードになってしまう。そこで、text/plain を指定して閲覧可能にする。

location /hello {
    default_type text/plain;
    echo "It works.(nginx)";
}                   

text/htmlの例

HTMLを配信できる🚗。

location /hello {
    default_type text/html;
    echo "<h1>It works.(nginx)</h1>";
}                   

活用方法

これを一体、何に使うのかと思うだろうが、実はとてもいい使い方がある。

server _defaultのデフォルトサーバーとともに使うととてもいい。

nginx ではサイトのドメイン名ごとにvirtual hostを設定していくと思うが、デフォルトサーバーの設定を忘れて、変なページが見えてしまうミスが多い。存在しないドメイン名で呼ばれたときに、404 を返しつつ、なにかメッセージを出したいとき、/var/www/default/htmlなどとフォルダを用意するのがとても不便である。自動化スクリプトを書いてると、nginxのデフォルトのwelcome to nginx を削除するのすらも面倒だよね。

デフォルトサーバーの設定が、nginxの設定だけで完結してスッキリした。

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    listen 443 ssl http2 default_server;
    ## 404 をそのまま返す
    location / {
        echo_status 404;
        default_type text/html;
        echo "<h1>It works</h1><p>but not found Domain Name.(nginx)</p>";
    }
}

これで、存在しないドメイン名を指定されたら404を返し、HTMLでメッセージもだす。

いちいちファイルを作らなくていいのが快適です。

実行例は、この様になる。

注意点

nginx には、apacheのような<IfModule>ディレクティブがないみたいなので、シンタックスエラーになる。libnginx-mod-echoがないとnginx -t やリロードでサーバーが停止するので注意が必要

参考資料