概要
前回 nginx に IP 制限をしてみました
今回は IP 制限した際にデフォルトのエラーページではなく json レスポンスを返却するようにしてみたいと思います
環境
- Ubuntu 16.04
- nginx 1.10.3
設定ファイル編集
前回の設定から以下のように編集します
- vim /etc/nginx/sites-available/ssl
server {
error_page 403 /403.json;
location /403.json {
default_type application/json;
return 403 '{"error": {"status_code": 403,"status": "Forbidden"}}';
}
allow 192.168.100.110;
deny all;
listen 443;
server_name your.site.domain.com;
ssl on;
ssl_certificate /etc/ssl/certs/chain_server.crt;
ssl_certificate_key /etc/ssl/certs/server.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:9292/;
proxy_redirect default;
}
}
先頭の error_page
とエラー用の location を追記しています
error_page 403 /403.json;
location /403.json {
default_type application/json;
return 403 '{"error": {"status_code": 403,"status": "Forbidden"}}';
}
403 エラーが発生した場合は /403.json
という場所にアクセスします
そして /403.json
は Content-Type application/json で {"error": {"status_code": 403,"status": "Forbidden"}}
という文字列を返却するように定義しています
こうすることで 403 のエラーページをデフォルトの HTML ではなく json 文字列を返却できるようになります
ポイントは 2 つで 403.html とせずに 403.json として点と default_type
ディレクティブを使用して Content-Type を application/json に設定してる点です
これをしないと text/html で返却されてしまいブラウザなどのクライアントなどでは HTML として判断して処理してしまうことになります
最後に
nginx の 403 ページを json 文字列が返るようにカスタマイズしてみました
別途エラーページ専用のファイルを用意しなくてもできるのは嬉しい点かなと思います
うまく application/json で返却されない場合は /etc/nginx/mime.types
というファイルに以下の設定が入っているか確認してみてください
application/json json;
0 件のコメント:
コメントを投稿