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
やリロードでサーバーが停止するので注意が必要