Help us understand the problem. What is going on with this article?

「このサイトって別の国からアクセスしたらどう見えるの?」ってときに、ちょろっとプロクシサーバを立てる方法

More than 1 year has passed since last update.

タイトル長っ!

 タイトル通りなんですが、そういうときってありますよね?リージョンによって表示内容変えてるサイトとか、ロケーションによって変わる広告とかの表示を確認したいですよね?
 ないですか?そうですか。。。

 まぁ、そういうことがある自分みたいな人のためのメモです。

プロクシ刺せばいいだけだよね?

 そうです。
 でも、自分が確認したい地域で使える(ちゃんと稼働してる)プロクシサーバを探すのが意外と面倒だし、それに、どこの馬の骨とも知れないサーバを踏み台にするとセキュリティ的にもよくありません。

 今どきはクラウドサービスを使えば、いろんな場所にあるデータセンターに自分のサーバを簡単に立てれます。たとえば、AWS を使えば次のリージョンから選び放題です↓
AWSのリージョン一覧

 他にも、たとえば DigitalOcean を使うと、AWSでは対応できないオランダ(アムステルダム)からの動作確認ができたりします。DigitalOceanのデータセンターがある国はこちら↓
DigitalOceanのデータセンターがある国

 あとは好きなところでプロクシサーバを立てるだけなんですが、プロクシサーバの設定について意外と日本語の情報がなかったので、メモっておきます。

前提

  • 「このサイトをいろんな国から見たい」という用途です
    • あらかじめ色んな国にサーバを用意しておくとかできないので、5分で立ち上げて使い終わったら捨てるという「使い捨て」感覚です
    • 結果的に、使った分しか料金も発生せず、経済的です
  • 「ちょこっと動作確認してみる」という用途です
    • 継続的にサービスを提供するためのものではありません
    • 従って、運用(ログの保存とか、死活監視とか…)とかセキュリティとかは深く考えません

やり方

  • すきなところにLinuxサーバを立てる
  • SSHでログインする
  • おもむろに↓のコマンドをコピペする
  • ポート3128でプロクシサーバが立ち上がる
  • 好きなように使う
  • 以上

Amazon Linux 2用コピペ

sudo yum update -y                                 && \
sudo yum install -y docker                         && \
sudo service docker start                          && {
cat <<CONF  > squid.conf
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl to_localhost dst 127.0.0.0/8
http_access deny to_localhost
http_access deny !Safe_ports
http_access allow all
http_port 3128
refresh_pattern .               0       0%     0
forwarded_for delete
CONF
}                                                  && \
sudo docker run --name squid -d --restart=always      \
  --volume `pwd`/squid.conf:/etc/squid/squid.conf     \
  --publish 3128:3128                                 \
  sameersbn/squid:3.5.27

CentOS 7.5用コピペ

SELinux対策に、chcon コマンドを一行追加します:

sudo yum update -y                                 && \
sudo yum install -y docker                         && \
sudo service docker start                          && {
cat <<CONF  > squid.conf
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl to_localhost dst 127.0.0.0/8
http_access deny to_localhost
http_access deny !Safe_ports
http_access allow all
http_port 3128
refresh_pattern .               0       0%     0
forwarded_for delete
CONF
}                                                  && \
chcon -Rt svirt_sandbox_file_t squid.conf          && \
sudo docker run --name squid -d --restart=always      \
  --volume `pwd`/squid.conf:/etc/squid/squid.conf     \
  --publish 3128:3128                                 \
  sameersbn/squid:3.5.27

Ubuntu用コピペ

yum の代わりに apt コマンドを使います:

sudo apt update && sudo apt -y upgrade             && \
sudo apt -y install docker.io                      && \
sudo service docker start                          && {
cat <<CONF  > squid.conf
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl to_localhost dst 127.0.0.0/8
http_access deny to_localhost
http_access deny !Safe_ports
http_access allow all
http_port 3128
refresh_pattern .               0       0%     0
forwarded_for delete
CONF
}                                                  && \
sudo docker run --name squid -d --restart=always      \
  --volume `pwd`/squid.conf:/etc/squid/squid.conf     \
  --publish 3128:3128                                 \
  sameersbn/squid:3.5.27

何をしているの?

 要は、Dockerをインストールして、 こちらのSquidのイメージ を最小限の設定で起動しているだけです。このコンテナイメージが信用できるのかどうかは、ご自分でご確認ください。
 なお、執筆時点で最新のイメージだったバージョン3.5.27に固定してあります。
(最近、Squid 4がリリースされてバージョン3系は非推奨になったそうですが、今は気にしないことにします)

 設定の内容について、簡単に説明しておきます。

1~2行目
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https

 プロクシを許可するプロトコル(ポート番号)を列挙しています。
 httpとhttpsのみをプロクシすることにします。

3~4行目
acl to_localhost dst 127.0.0.0/8
http_access deny to_localhost

localhost、つまりこのプロクシサーバへのアクセスを拒否します。

5~6行目
http_access deny !Safe_ports
http_access allow all

 上で列挙したプロトコル以外へのアクセスを拒否します。
 それ以外へのアクセスをすべて許可します。

7行目
http_port 3128

 Listenするポートに3128を指定しています。

8行目
refresh_pattern .               0       0%     0

 キャッシュをしないようにしています。
(動作確認するときって、何度もリロードして変化を見たりするので、キャッシュされたくないのです)

9行目
forwarded_for delete

 X-Forwarded-Forヘッダを出力しないようにします。
(X-Forwarded-ForのIPにもとづいてコンテンツが変えられると困るため)

 最小限なので、あとは好きなようにカスタマイズして使ってください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away