Windowsのプロキシについて調べてみた

記事タイトルとURLをコピーする

こんにちは、SWX3人目の熊谷(悠)です。
Windows10でしてない筈だったプロキシ設定でハマり、プロキシ設定はどこにあるのか調べても、一覧的なものが見当たらなかったので備忘として記します。

バージョン情報

Windows 10 Pro バージョン 1909

システムのプロキシ設定

WinInet

Internet Explorerとその関連するコンポーネントでWindows内において共通で使われているもので、どれか一つ設定すれば全て同じ設定になります。

  • (windows自体の)スタートメニュー>設定>ネットワークとインターネット>プロキシ
  • Google Chrome>Google Chromeの設定>設定>詳細設定>システム>パソコンのプロキシ設定を開く
  • Microsoft Edge(Chromium)>設定など>設定>システム>コンピューターのプロキシ設定を開く
  • Internet Exploror(11)>ツール>インターネットオプション>接続>LAN の設定>プロキシ サーバー
  • レジストリ エディター>[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] ※レジストリ設定はログオフ&ログオン等しないと即時反映はされないようです。

参考

Microsoft Windows Internet - Wikipedia
レジストリ ファイルを使用してクライアントのプロキシ サーバー設定を構成する方法

WinHTTP

WinInetからサーバとしての利用を考慮したHTTP専用のコンポーネントで、Windows Update等で利用されています。

コマンドプロンプトを管理者として実行して、以下のコマンドで設定します。

C:\Windows\system32>netsh
netsh>winhttp

# 現在の設定内容を表示
netsh winhttp>show proxy

現在の WinHTTP プロキシ設定:

    直接アクセス (プロキシ サーバーなし)。

# プロキシ設定を行う
netsh winhttp>set proxy http://192.168.0.1:80

現在の WinHTTP プロキシ設定:

    プロキシ サーバー:  http://192.168.0.1:80
    バイパス一覧     : (なし)

# プロキシ設定をリセットする
netsh winhttp>reset proxy

現在の WinHTTP プロキシ設定:

    直接アクセス (プロキシ サーバーなし)。

参考

winhttp proxyの設定とその周辺事情
WinHTTP(Windows HTTP Services)とは - IT用語辞典 e-Words
グループ ポリシーを使用して、WinHTTP プロキシ設定を Windows クライアントに適用する
WinHTTPプロキシの設定方法

環境変数

環境変数にプロキシ設定をしておくと、デフォルトで環境変数を参照するソフト等にて共通の設定が適用できます。

コントロール パネル>システムとセキュリティ>システム>システムの詳細設定>詳細設定>環境変数

CUIで設定する場合、Windows PowerShellを管理者として実行して、以下のコマンドで設定します。

# システム環境変数のhttps_proxy変数の設定内容を取得
PS C:\Windows\system32> [Environment]::GetEnvironmentVariable("https_proxy","Machine")
https://192.168.0.1:80/

# ユーザー環境変数のhttps_proxy変数の設定内容を取得
PS C:\Windows\system32> [Environment]::GetEnvironmentVariable("https_proxy","User")
# 未設定の場合は何も出力されない

# システム環境変数のhttps_proxy変数を削除する
PS C:\Windows\system32> [Environment]::SetEnvironmentVariable("https_proxy", "", [System.EnvironmentVariableTarget]::Machine)

# ユーザー環境変数のhttps_proxy変数に値を設定する
PS C:\Windows\system32> [Environment]::SetEnvironmentVariable("https_proxy", "https://192.168.0.1:80/", [System.EnvironmentVariableTarget]::User)

参考

環境変数を取得する

各使用ソフトウェアの設定

ここはwindowsの設定ではないのでおまけです。以下にも色々纏まってました。
日々プロキシで苦しむ人の為のプロキシ設定まとめ

Firefox

Firefox>メニュー>オプション>ネットワーク設定>接続設定
Firefoxは他ブラウザと異なり、システムから独立したプロキシ設定も可能です。

Visual Studio Code

http.proxySupportキーがoverrideの時は環境変数のhttps_proxyを参照します。(デフォルト設定)
※システムのプロキシ設定は参照しません。

  1. Ctrl+, もしくは Manage>Settingsで設定画面を開く
  2. 右上タブのOpen Settings(JSON)でjsonを開くか、proxyと検索し、以下設定を追加or削除
{
    "http.proxy": "https://192.168.0.1:80/",
    "http.proxyAuthorization": null
    "http.proxyStrictSSL": false,
    "http.proxySupport": "on",
}

設定が誤っているとExtensionsで以下警告が表示されて拡張機能の検索やお勧めが出なくなります。
We cannot connect to the Extensions Marketplace at this time, please try again later.

参考

Visual Studio Code のプロキシ設定

npm

デフォルト設定では環境変数のhttps_proxyを参照します。
※以下バージョンuser-agent = "npm/6.14.4 node/v12.17.0 win32 x64"の場合

# 現在のプロキシ設定を確認
C:\Users\user>npm config list -l
...
https-proxy = null
...
proxy = null
...

# proxyを設定
C:\Users\user>npm config set proxy https://192.168.0.1:80

# https-proxyを設定
C:\Users\user>npm config set https-proxy https://192.168.0.1:80

# proxy設定を削除
npm config delete proxy

# https-proxy設定を削除
npm config delete https-proxy

実設定ファイルがC:\Users\user\.npmrc等に配置されている(環境によって異なります)ので、こちらでも設定は可能です。

参考

proxy配下のnpm設定
[Node.js] npm の proxy と registry 設定
Windows10でnode/npm周りにproxy設定する備忘録

何にハマったか?

npm installを実行すると、以下エラーが発生しました。

C:\Users\user>npm install -g serverless
npm ERR! code ETIMEDOUT
npm ERR! errno ETIMEDOUT
npm ERR! network request to https://registry.npmjs.org/serverless failed, reason: connect ETIMEDOUT 192.168.0.1:80
npm ERR! network This is a problem related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly.  See: 'npm help config'

いつどこで設定したか記憶は定かではないのですが、昔必要があってserver:192.168.0.1port:80(そんなプロキシサーバーは実際には存在しません)を一度WinInetに設定してすぐ削除した覚えがありました。
ただ、上項目「システムのプロキシ設定」が全て未設定な事と、npm configが未設定な事を確認して、
念の為npm config deleteもしてみましたがエラーが解消できなかったので、どこにプロキシ設定が隠れているんだ...と頭を悩ませていたら、
何故か環境変数に設定が残っていたので、削除したところ無事解決できました!

まとめ

  • プロキシ設定箇所は1つではない。
  • ソフトによって参照しているプロキシ設定箇所は異なる。

熊谷 悠司 (記事一覧)