学校や職場ではプロキシを運用している場合が多いと思います。
システム構築の際には意外な落とし穴になることも。認証がかかっているものはさらに面倒です。
以下によく利用されるものを記載します。
設定コマンドと、表示コマンドがあれば記載しておきます。
もくじ:
環境変数
コマンドラインでの設定
Linuxで環境変数に設定してしまって構わない場合は、下記の変数を設定します。大抵のコマンドは環境変数を参照しているので、個別に設定する代わりにしてもうまくいくケースが多いです。
1 2 | $ export http_proxy="http://{UserName}:{Password}@{proxy.server}:{port}/" $ export https_proxy="http://{UserName}:{Password}@{proxy.server}:{port}/" |
sudo
を使う場合は、そのままでは環境変数が伝播しないのでエイリアスを設定すると便利です。-E
は環境変数を引き継ぐオプションで、sudo
を使う際に個別に打ってもいいのですが、面倒ですし、うっかり忘れることもありますので。オプションのあとには半角スペースが必要です。
1 | $ alias sudo='sudo -E ' |
スクリプトでの設定
スクリプト(bash)に書く場合はこんな感じ。shopt ...
はbashスクリプト中でエイリアスを有効化するための記述です。
1 2 3 4 5 | #!/bin/bash export http_proxy="http://{UserName}:{Password}@{proxy.server}:{port}/" export https_proxy="http://{UserName}:{Password}@{proxy.server}:{port}/" shopt -s expand_aliases alias sudo='sudo -E ' |
source
コマンドを使うとコンソールで有効化することもできますね。
1 2 | $ source setproxy.sh $ echo $http_proxy |
各アプリケーションでの設定
[RedHat] yum/dnf
yum
コマンドでレポジトリと通信する前に、設定ファイルに追記しておきます。
1 2 3 4 5 | $ vi /etc/yum.conf # 以下を追加して更新 proxy=http://{proxy.server}:{port} proxy_username={UserName} proxy_password={Password} |
CentOS8からは標準のyumコマンドが後継のdnf (yum v4)になっているようなので/etc/dnf/dnf.conf
に書いておきます。書式は同じです。
[RedHat] rpm
1 | $ rpm -ivh http://server.name/package.rpm --httpproxy http://{UserName}:{Password}@{proxy.server} --httpport {port} |
ここではrpm
コマンドの文中にオプションとして指定しています。
[Debian] apt, apt-get
下記のように設定ファイルに書くか、もしくはコマンド中で同じパラメータを書いても通るようです。
1 2 3 4 5 6 | $ vi /etc/apt/apt.conf # 以下を追加して更新 Acquire::http::proxy "http://{UserName}:{Password}@{proxy.server}:{port}/"; # またはコマンドから実行する例 $ sudo apt update -o Acquire::http::proxy="http://{UserName}:{Password}@{proxy.server}:{port}/" |
設定ファイルに書く場合、末尾のセミコロンを忘れがちなので注意。
apt-key
を使う場合は次のように指定します。
1 | $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5 --keyserver-option http-proxy=http://{UserName}:{Password}@{proxy.server}:{port} |
[Linux] wget
初期化ファイルに記載するのがよくやる方法のようです。
1 2 3 4 5 6 | $ vi ~/.wgetrc # 以下を追加して更新 http_proxy=http://{proxy.server}:{port}/ https_proxy=http://{proxy.server}:{port}/ proxy_user={UserName} proxy_password={Password} |
[Atom] apm
Atom(テキストエディタ)を使っているとテーマやパッケージの取得、更新でプロキシ認証が必要な場面があります。
1 2 | $ apm config get https-proxy $ apm config set https-proxy http://{UserName}:{Password}@{proxy.server}:{port} |
まあ、パッケージによってはさらにNodeに依存していて、Nodeのほうでプロキシに引っかかった間抜けな思い出がありますが、レアケースです。
Windowsで、たまにパスが張れていないと、そもそもapm
コマンドが通らないことがあります。
その場合はC:/Users/(UserName)/AppData/Local/atom/bin/apm
あたりにスクリプトがあるので、直接指定しても動作します。
それらスクリプトも他のexeを呼んでいるだけで、実体はatomをインストールした場所のresource/cli
あたりにあるようです。
[Node.js] npm
npmはたまに通信エラー(正確にはプロキシの認証エラー)にひっかかりますが、プロキシまたはパッケージのレジストリを設定すると解決することがあります。
1 2 3 4 | $ npm -g config list $ npm -g config set proxy http://{UserName}:{Password}@{proxy.server}:{port} $ npm -g config set https-proxy http://{UserName}:{Password}@{proxy.server}:{port} $ npm -g config set registry http://registry.npmjs.org/ |
[Python] pip
Windowsの場合はコマンドプロンプトから環境変数を設定すると、以降pip
コマンドがプロキシ経由で通ります。あたりまえですが、ウィンドウを閉じるとセッションが終わるので設定が飛びます。
1 2 3 | # Windows $ set HTTPS_PROXY=http://{UserName}:{Password}@{proxy.server}:{port}/ $ pip install pandas |
Linuxの場合はコマンドのパラメータとして渡してしまうのが楽です。
Windowsは何故かこれが効かない。。。
1 2 | # Linux $ sudo pip install pandas --proxy http://{UserName}:{Password}@{proxy.server}:{port} |
[Docker] docker
DockerをLinuxのsystemdでデーモンとして動かす場合、コンソールで環境変数を設定しても効きません。
Dockerは基本的にコンテナのイメージをネットワーク経由でpullすることになるので、プロキシ設定は重要です。
Dockerホストで/etc/systemd/system/docker.service.d/http-proxy.conf
なるファイルを作成することでdockerデーモン用にプロキシを設定できます。
1 2 3 4 5 6 7 8 9 10 11 12 | # Linux $ sudo mkdir -p /etc/systemd/system/docker.service.d $ echo "[Service]" > ./dproxy.conf $ echo "Environment=\"HTTP_PROXY=http://{UserName}:{Password}@{proxy.server}:{port}/\"" >> ./dproxy.conf $ sudo cp dproxy.conf /etc/systemd/system/docker.service.d/http-proxy.conf $ rm -f dproxy.conf ## 要は下記の内容を書いたファイルhttp-proxy.confを作成する ## [Service] ## Environment="HTTP_PROXY=http://...." "NO_PROXY=localhost,..." $ sudo systemctl daemon-reload $ sudo systemctl restart docker |
バリエーションとして、Https(HTTPS_PROXY
, https-proxy.conf
ファイル)や例外ホスト(NO_PROXY
)を設定することもできます。
Windowsでのプロキシ設定
Windowsでのプロキシ設定は、「インターネットオプション」での設定が重要になっています。これはそもそもIE (Internet Explorer)やEdgeを設定するものですが、システム本体にも関わってきます。
インターネットオプション
「インターネット オプション」(または「インターネットのプロパティ」)はコンパネから開くか、下記をコマンドプロンプトやPowerShell、「ファイル名を指定して実行」メニューからコマンドラインで起動します。
1 | > inetcpl.cpl |
通常は管理者権限が必要になるので、コマンドラインから開く場合は「管理者として実行」コンテキストメニューなどを使うことになるでしょう。
「接続」タブ>「LANの設定」に進みます。
かつてはIEの設定をするためのものでしたが、プロキシなど一部の項目はEdgeや「Windowsの設定」アプリにも同期されます。ChromeやFirefoxなどサードパーティ製のブラウザにもこの設定を参照するオプションがあります。
基本的には「プロキシサーバー」にサーバのアドレス(IPアドレスまたはホスト名)とポート番号を設定します。
学校や会社など構成スクリプトが配布されている場合は「自動構成スクリプトを使用する」の項目に設定します。部署やセグメントに応じて設定を切り替えるための、”http://…./xxx.pac”みたいなやつですね。
Windowsの場合、アカウントは資格情報として管理されているので、ユーザ名やパスワードはブラウザ利用時に入力します。
システム設定
その他、Windows Updateなどが内部的に使うプロキシ設定もあります。管理者権限を持つコマンドラインからnetsh
を使います。
1 2 3 4 5 6 7 8 | # 現在有効な設定の参照 > netsh winhttp show proxy # 「インターネットオプション」の設定をインポート > netsh winhttp import proxy source=ie # コマンドラインから設定 > netsh winhttp set proxy proxy-server="{proxy.server}:{port}" # 初期状態へリセット(設定の削除) > netsh winhttp reset proxy |
おわり。