日々プロキシで苦しむ人の為のプロキシ設定まとめ

# はじめに

1. カタカタカタカタ
2. できたできた！さぁ動かすぞっていうときのUnknownHost・・・・
3. またか・・・とため息をつきながらぐぐる
4. 設定する
5. 1へ戻る

**プロキシが憎い！**

だけど、頑張ってくぐらないといけない！そんなあなたの為のプロキシ設定まとめです。私が良く使うものを随時更新していきます。
追加して欲しいものがあればコメントいただければ追加しますので編集リクエストください。

尚以下のような記述はご自分の環境に合わせて変更をお願いします。

```
http[s]://PROXY_HOST:PROXY_PORT
```

---

# 環境

* Windows,CentOSを前提としています。
* Ubuntuは会社ではあまり使わないので・・・

--- 

# ブラウザ

書かなくてもいい気がしたが一応書いておく。社内サーバ系は除外リストに入れとこ。

## IE

* インターネットオプション ⇒ 接続 ⇒ LANの設定

## Chrome

* Chromeのプロキシ設定はIEの設定を見ます。Chromeから開く場合は以下の手順。
* 設定 ⇒ 画面下部の「詳細設定を表示」 ⇒ プロキシ設定の変更

* プロキシのせいでSlideShareが見れない人は、[SlideShareViewer](https://chrome.google.com/webstore/detail/slideshare-viewer/iielbgdjdenipcchemkiknljbghjfdlk?hl=ja)が必須です。

## FireFox

* 独自でプロキシ設定を持っているので設定しておく。
* ツール ⇒ オプション ⇒ 詳細タブ ⇒ ネットワーク ⇒ 接続設定

---

# Microsoft Store

管理者権限でコマンドプロンプトを開く

IEのプロキシ設定を反映する

```
netsh winhttp import proxy source=ie
```

設定されているかを確認する

```
netsh winhttp show proxy
```

--- 

# 構成管理

## Git

* gitコマンドで追加(~/.gitconfigに追記される）

```
$ git config --global http.proxy http://PROXY_HOST:PROXY_PORT
$ git config --global https.proxy http://PROXY_HOST:PROXY_PORT
```

* 環境変数で追加

```
$ export http_proxy="http://PROXY_HOST:PROXY_PORT"
$ export https_proxy="http://PROXY_HOST:PROXY_PORT" 
```

## SVN(Subversion)

### コマンド

* Jenkins設定するときによく使うんだよね。

```
cat ~/.subversion/servers
[global]
http-proxy-exception = NO_PROXY_HOST
http-proxy-host = PROXY_HOST
http-proxy-port = PROXY_PORT
```

### Tortoise Svn

1. settingの画面で、左タブ⇒Networkを開く
2. Enable Proxy Serverにチェックをつけてプロキシの設定を行う。

---

# CI

## Jenkins

```
 Jenkinsの管理 -> プラグインの管理 -> 高度な設定
```

でもいいし、Javaの起動引数に以下を追加してもOK

```
 -Dhttp.proxyHost=PROXY_HOST -Dhttp.proxyPort=PROXY_PORT
```

# コマンド

## curl

* コマンド

```
curl -x PROXY_HOST:PROXY_PORT -L url
```

* 設定ファイル

```
echo `proxy = "http[s]://PROXY_HOST:PROXY_PORT/"' >> ~/.curlrc
```

## wget

* 環境変数

```
export http_proxy="http[s]://PROXY_HOST:PROXY_PORT/"
export https_proxy="http[s]://PROXY_HOST:PROXY_PORT/"
export ftp_proxy="http[s]://PROXY_HOST:PROXY_PORT/"
```

* 設定ファイル(/etc/wgetrc, ~/.wgetrc)

```
proxy_user=PROXY_USER
proxy_password=PROXY_PASSWORD
http_proxy=http[s]://PROXY_HOST:PROXY_PORT/
https_proxy=http[s]://PROXY_HOST:PROXY_PORT/
```

## yum

* 環境変数

```
export http_proxy="http[s]://PROXY_HOST:PROXY_PORT/"
export https_proxy="http[s]://PROXY_HOST:PROXY_PORT/"
```

* 設定ファイル（/etc/yum.conf）

``` /etc/yum.conf
proxy=http[s]://PROXY_HOST:PROXY_PORT/
proxy_username=[UserId]
proxy_password=[Password]
```

## rpm

* 環境変数

```
export http_proxy=http[s]://PROXY_HOST:PROXY_PORT/
```

* コマンドライン

```
rpm --httpproxy PROXY_HOST--httpport PROXY_PORT
```

---

# Powershell

## Invoke-WebRequest

* -Proxyを利用する（AnsibleでWinRMを利用する時に利用するスクリプトをダウンロードする場合はこんな感じ）

```
Invoke-WebRequest -Uri https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/Con
figureRemotingForAnsible.ps1 -OutFile ConfigureRemotingForAnsible.ps1 -Proxy http://PROXY_HOST:PROXY_PORT
```

---

# python

## pip

pip install モジュール名 --proxy=http://PROXY_HOST:PROXY_PORT


## [boto](http://boto.readthedocs.io/en/latest/boto_config_tut.html)

* botoはAWSにアクセスするためのモジュールです。

```~/.boto
[Boto]
debug = 0
num_retries = 10

proxy = PROXY_HOST
proxy_port = PROXY_PORT
proxy_user = foo
proxy_pass = bar
```

---

# Ruby

## gem

```
gem install パッケージ名 -r -p http[s]://PROXY_HOST:PROXY_PORT/
```

## bundler, rbenv

```
export http_proxy=http[s]://PROXY_HOST:PROXY_PORT/
```

---

# Java

## Eclipse

* ウィンドウ ⇒ 設定 ⇒ 一般の下のネットワーク接続
* 「ネイティブ」はIEの設定を引っ張ってきています。それに対しマニュアルは自分で設定を行うモードです。

## HttpClient4.x系

* 3と4で違うあたりが憎くてしょうがないですが、、、HttpClientに設定してあげます。

### ソースで指定

```proxy.java
		HttpClient httpClient = HttpClientBuilder
				.create()
				.setDefaultRequestConfig(requestConfig)
				.setDefaultHeaders(headers)
				.setProxy(new HttpHost("PROXY_HOST", PROXY_PORT))
				.build();
```

### VMパラメータで指定

* VMパラメータでも設定できますがHttpClientに.useSystemProperties()を設定する必要があります。

```
-Dhttp[s].proxyHost=PROXY_HOST -Dhttp[s].proxyPort=PROXY_PORT
```

```httpclient.java
		HttpClient httpClient = HttpClientBuilder.create()
				.setDefaultRequestConfig(requestConfig)
				.setDefaultHeaders(headers)
				.useSystemProperties()
				.build();
```

## Gradle

* 環境変数では設定できないようです。また、UserとPasswordは使わなくてもプロパティとしては必要な模様

```.gradle/gradle.properties
systemProp.http.proxyHost=myproxy.co.jp
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=
systemProp.http.proxyPassword=
systemProp.https.proxyHost=myproxy.co.jp
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=
systemProp.https.proxyPassword=
```

## Maven

### Maven

* settings.xmlに記載する
* archivaなどが社内にいる場合はnonProxyHostsの設定を忘れずに。

```settings.xml
<settings>
  <proxies>
    <proxy>
      <active>true</active>
      <protocol>http</protocol>
      <host>PROXY_HOST</host>
      <port>PROXY_PORT</port>
      <username>proxyuser</username>
      <password>somepassword</password>
      <nonProxyHosts>www.google.com|*.somewhere.com</nonProxyHosts>
    </proxy>
  </proxies>
</settings>
```

#### MavenWrapper(mvnw)

```
export MAVEN_OPTS=-Dhttp.proxyHost=PROXY_HOST -Dhttp.proxyPort=PROXY_PORT -Dhttps.proxyHost=PROXY_HOST  -Dhttps.proxyPort=PROXY_PORT
```

---

## Go

### go get

```
export http_proxy=http[s]://PROXY_HOST:PROXY_PORT
export https_proxy=http[s]://PROXY_HOST:PROXY_PORT
```

## Apache Archiva

1.左メニュー[NetworkProxies]を選択
2.ID,Protocol,Host,Portなどの情報を登録してSaveする。
3.左メニュー[ProxyConnectors]を選択
4.外部リポジトリに接続するリポジトリで[Edit]を選択　例：central
5.NetworkProxyに先ほど登録したProxyのIDを選択してSaveする。

## AWS(SDK for Java)

* ClientConfigurationのインスタンスを作成してAmazonEC2のコンストラクタに渡してあげるだけです。
* EC2に限らずSQSなどなど他のクライアントクラスでも同様

```clientconfiguration.java
		AWSCredentialsProvider provider = new ClasspathPropertiesFileCredentialsProvider();

		ClientConfiguration cc = new ClientConfiguration();
		cc.setProxyHost("PROXY_HOST");
		cc.setProxyPort(PROXY_PORT);

		AmazonSQS sqs = new AmazonSQSClient(provider, cc);
		sqs.setRegion(Region.getRegion(Regions.AP_NORTHEAST_1));
		return sqs;
```

## SoftLayer(Java)

* 内部ではURLConnectionを使っているので、Javaのシステムプロパティに設定してあげればプロキシ経由できます。

```proxy.java
System.setProperty("proxySet", "true");
System.setProperty("proxyHost", proxyHost);
System.setProperty("proxyPort", proxyPort);
```

---

# 監視

## [DataDog Agent](https://github.com/DataDog/dd-agent/wiki/Proxy-Configuration)

* 設定ファイル

```/etc/dd-agent/datadog.conf
proxy_host: PROXY_HOST
proxy_port: PROXY_PORT
proxy_user: 
proxy_password: 
```

## [mackerel-agent](https://mackerel.io/ja/docs/entry/spec/agent)

* 設定ファイル

```/etc/mackerel-agent/mackerel-agent.conf
http_proxy = "http://PROXY_HOST:PROXY_PORT"
```

* 環境変数

```
HTTP_PROXY=http://PROXY_HOST:PROXY_PORT
```


---
# その他環境

## Vagrant

### vagrant upするときの通信(windowsの場合）
```
set http_proxy=PROXY_HOST:PROXY_PORT
set https_proxy=PROXY_HOST:PROXY_PORT
```

### ゲストOS上のProxyを自動設定

プロキシ設定対象はこちら

```
generic http_proxy etc. environment variables that many programs support
default proxy configuration for all Chef provisioners
proxy configuration for Apt
proxy configuration for Docker
proxy configuration for Git
proxy configuration for npm
proxy configuration for PEAR
proxy configuration for Subversion
proxy configuration for Yum
simple proxy configuration for Windows
```

１. [vagrant proxyconf](https://github.com/tmatilai/vagrant-proxyconf)を利用します。

このプラグインはVagrant管理下のOS起動時にプロキシを自動的に設定してくれるプラグインです。たとえばyum利用時にいちいちproxyの設定をする必要が無くなります。

```
vagrant plugin install vagrant-proxyconf
```

２. プラグインがインストールできたことを確認しましょう。

```
$ vagrant plugin list
vagrant-proxyconf (1.5.0)
```

３. Vagrantfileに設定を追加します。

```Vagrantfile
Vagrant.configure(2) do |config|
・・・・・
  if Vagrant.has_plugin?("vagrant-proxyconf")
    config.proxy.http = "http://PROXY_URL:PROXY_PORT/"
    config.proxy.https = "http://PROXY_URL:PROXY_PORT/"
    config.proxy.no_proxy = "localhost,127.0.0.1,192.168."
  end
end
```

## Azure

* azure cli

```
# export https_proxy=http[s]://PROXY_HOST:PROXY_PORT/
# export http_proxy=http[s]://PROXY_HOST:PROXY_PORT/
```

## VirtualBox

* ファイル - 環境設定 - プロキシで設定

## Docker

### Docker(CentOS7,Docker1.9.1で確認)

* docker pull,searchするには外部と接続する必要がありますので設定してみます。公式ドキュメントは[こちら](https://docs.docker.com/engine/admin/systemd/)
１．proxy用の設定ファイルを作る(/etc/systemd/system/docker.service.dは新たに作る）

```/etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http[s]://PROXY_HOST:PROXY_PORT/" "HTTPS_PROXY=http[s]://PROXY_HOST:PROXY_PORT/"
```

２．変更を反映する

```
sudo systemctl daemon-reload
```

３．反映を確認する

```
# systemctl show --property=Environment docker
Environment=GOTRACEBACK=crash HTTP_PROXY=http[s]://PROXY_HOST:PROXY_PORT/ HTTPS_PROXY=http[s]://PROXY_HOST:PROXY_PORT/
```

４．反映する

```
systemctl restart docker
```

### Docker-machine

* Docker-machineをcreateするときに利用します。

```
docker-machine create -d virtualbox --engine-env HTTP_PROXY=http[s]://PROXY_HOST:PROXY_PORT/ --engine-env HTTPS_PROXY=http[s]://PROXY_HOST:PROXY_PORT/ --engine-env NO_PROXY=127.0.0.1 \
    docker
```

### Dockerfile

* Dockerfile内でyumなどを行う場合、ENVで環境変数を定義しても良いのですが・・・

```
ENV http_proxy http[s]://PROXY_HOST:PROXY_PORT/
```

* [ARG](https://docs.docker.com/engine/reference/builder/#/arg)を使うとDockerfileがproxyに依存しなくなります。予め以下のARGは定義済です。

```
HTTP_PROXY
http_proxy
HTTPS_PROXY
https_proxy
FTP_PROXY
ftp_proxy
NO_PROXY
no_proxy
```

* docker buildするときに--build-argsを設定してあげましょう

```
docker build --build-arg HTTP_PROXY=http[s]://PROXY_HOST:PROXY_PORT --build-arg HTTPS_PROXY=http[s]://PROXY_HOST:PROXY_PORT -t uzresk/xxxx:ver1.1 .
```


## ElasticSearch

* pluginのインストール時にproxyを設定します。
* elasticsearch-headプラグインをインストールする場合は以下のようなコマンドになります。

```
/usr/share/elasticsearch/bin/plugin -DproxyPort=PROXY_PORT -DproxyHost=PROXY_HOST -i
nstall mobz/elasticsearch-head
```

## cygwin

* setup.exeを進んでいくとプロキシ設定する画面がでてくるのでそこに入力