すこぶる.net

技術系備忘録など

nginx

【Nginx】フォワードプロキシを構築する

投稿日:

フォワードプロキシとは

フォワードプロキシを利用することで、接続元のIPを変更および、固定することが可能です。
接続元のサーバが複数台存在し、IP制限をかけてある接続先に対してリクエストをする際に、それぞれのIPアドレスすべてを許可するのは大変ですし、運用上の課題があります。
(仕組みや目的は違いますが、AWSなどではプライベートサブネット内から NAT Gateway を利用し、固定のIPで接続先にリクエストをすることは可能です。)

そこでフォワードプロキシ用のサーバをNginxで構築し、そのサーバを経由させることで、接続元IPの変更を実現します。
(Squidで用意したことはあったのですが、Nginxでやったことはなかったので作業ログを残しておこうと思います。)

フォワードプロキシをNginxで構築する

Nginxでフォワードプロキシを用意します。
ngx_http_proxy_connect_module というモジュールをビルドする必要があるため以下の手順でインストールしてください。
事前に必要なものをインストールしておきます。
※ Nginxの対応バージョンは https://github.com/chobits/ngx_http_proxy_connect_module を確認してください。
nginx をダウンロードし、フォワードプロキシに必要なモジュールを配置しインストールを実行します。
確認
運用のことを考えて、Systemdで管理するようにしましょう。
以下のように、502 エラー になるときがある。
その際は resolver 8.8.8.8 ipv6=off; を追加設定・変更するとよい。

 

まとめ

プログラムからフォワードプロキシを実行する際は、それぞれ適当なライブラリやオプションを使用して、上記で作成したNginxを経由するようにしてください。
アクセス先のログには、接続元のIPがフォワードプロキシで利用したNginxサーバのIPになっていることが確認できると思います。
先ほども上げた通り、仕組みや目的は違いますが AWS NAT Gateway 等を使用することで接続元のIPを固定したり変更したりすることは容易ですが、今回のフォワードプロキシが何かの参考になれば嬉しいです。
ただしクローラーとして IP制限を回避するための利用など、合意の取れていないサービスに対して害となるような利用は控えるように注意してください。

-nginx
-

執筆者:

関連記事

【Nginx】キャッシュ作成時のバックエンドへのリクエストをproxy_cache_lockで制限する

概要 Nginx でキャッシュの有効期限が切れたとき、一勢にリクエストがバックエンドに流れることになります。。 そうなると、当然バックエンドサーバの負荷が大きくなりサービス障害につながるので注意が必要 …

【Nginx】変数の中身を確認しデバッグする方法

Nginx で変数をログに出力する Nginx を使用していると、実際に変数の中身を確認して設定を組みたい、特定の変数の中身をログに出力して確かめたい!なんてことがあると思います。 そんなときに役立つ …

HTTPS化に向けてWebサーバでSSL設定をするときのコツ

概要 Webサイトのセキュリティが案じられている現状で、各サイトのHTTPS(SSL化)への移行が急速に進んでいる。 GoogleもHTTPSサイトへの移行を推奨しており、SEO観点でも大きく影響して …

NginxからプライベートのS3にリバースプロキシ

概要 Nginx から AWS にあるプライベートな S3 のバケットにリバースプロキシしたいという要件があったため、その方法をご紹介します。 AWS にある EC2 上からであれば、IAM Role …

【Nginx】$upstream_cache_status-キャッシュステータスの見方

Nginx でキャッシュのステータスを確認する方法 まずNginxでキャッシュを使用している場合に、ユーザのリクエストに対して、キャッシュが効いているか確認する方法を紹介します。 やることは非常に簡単 …