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

# タイトル長っ！

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

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


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

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

　今どきはクラウドサービスを使えば、いろんな場所にあるデータセンターに自分のサーバを簡単に立てれます。たとえば、[AWS](https://aws.amazon.com/) を使えば次のリージョンから選び放題です↓
<img src="https://qiita-image-store.s3.amazonaws.com/0/100577/b4ceac15-838f-651d-d8be-b29d9e96f4b4.png" width="140" height="297" alt="AWSのリージョン一覧">

　他にも、たとえば [DigitalOcean](https://www.digitalocean.com/) を使うと、AWSでは対応できないオランダ（アムステルダム）からの動作確認ができたりします。DigitalOceanのデータセンターがある国はこちら↓
![DigitalOceanのデータセンターがある国](https://qiita-image-store.s3.amazonaws.com/0/100577/1875ef59-7574-37ca-b312-11363ae87443.png)

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


# 前提

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


# やり方

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

### Amazon Linux 2用コピペ

```shell
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` コマンドを一行追加します：

```shell
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` コマンドを使います：

```shell
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のイメージ](https://hub.docker.com/r/sameersbn/squid/) を最小限の設定で起動しているだけです。このコンテナイメージが信用できるのかどうかは、ご自分でご確認ください。
　なお、執筆時点で最新のイメージだったバージョン3.5.27に固定してあります。
（最近、Squid 4がリリースされてバージョン３系は非推奨になったそうですが、今は気にしないことにします）

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

```config:1～2行目
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
```

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

```config:3～4行目
acl to_localhost dst 127.0.0.0/8
http_access deny to_localhost
```

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

```config:5～6行目
http_access deny !Safe_ports
http_access allow all
```

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

```config:7行目
http_port 3128
```

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

```config:8行目
refresh_pattern .               0       0%     0
```

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

```config:9行目
forwarded_for delete
```

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

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