[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ただいまコメントを受けつけておりません。
会社で少し話題になったので nginx で接続元制限をかける手順をごりごり確認する。
Module ngx_http_access_module に詳しく書いてあるので、こちらを読もう。試しに以下のように設定してみる。実行する前に ifconfig (Windows なら ipconfig) コマンドを実行し、自分の持っている IP アドレスを確認しておく。これを試した時点では 192.168.1.17
だった。なので、 nginx.conf に次のように記述する。
server { # 中略 location /google { proxy_pass https://google.com; allow 192.168.1.17/32; deny all; } }
以上の設定をしたうえで nginx を再起動 (私の手元は ubuntu なので service nginx restart
)。http://localhost/google に手元からつなぐと127.0.0.1 からのアクセスと見られて403 が返ってくる。
http://192.168.1.17/google に手元から繋ぐと問題なく google に転送される。ただし、手元のスマートフォンから同じところにアクセスを試みると192.168.1.17からのアクセスではないので 403 が返ってくる。なお、上の記述だと /google
のみに設定しているので他には localhost からでも問題なくつなげる。
nginx デフォルトの 403 画面は可愛くないのでかわいいのに変更する。
server { # 中略 error_page 403 /forbidden.html; location = /forbidden.html { root /tmp; internal; } location /google { proxy_pass https://google.com; allow 192.168.1.17/32; deny all; } }
さらに /tmp
に forbidden.html
を配置し、かわいい内容を書いておく。この上でhttp://localhost/googleにアクセスを試みると /tmp/forbidden.html
の内容が表示されるはずである。
internal
を入れたことによってどんな影響があるのかは http://localhost/forbidden.html にアクセスしてみると分かる。/tmp/forbidden.html
の内容ではなく 404 が返ってくる。詳しい話は Module ngx_http_core_module に記載されている。error_page
についてはあまり説明はいらない気がするが Module ngx_http_core_module に同様に記載がある。
nginx には return なる機能があると Module ngx_http_rewrite_module にはある。これによると Stops processing and returns the specified
(処理を停止し、特定の HTTP ステータスコードをクライアントに返す。HTTP ステータスコードのルールに存在しない 444 を返そうとした場合、レスポンスヘッダの返答もなく接続を断ち切る)。最初に設定した接続元制限で接続を拒絶した場合に 403 すら返さず接続を切断してみる。code
to a client. The non-standard code 444 closes a connection without sending a response header.
server { # 中略 error_page 403 =444 /forbidden.html; location = /forbidden.html { return 444; } location /google { proxy_pass https://google.com; allow 192.168.1.17/32; deny all; } }
もちろん、418 とか 451 とかを返すこともできる。返したいかはともかくとして。
ただいまコメントを受けつけておりません。