はじめに
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の設定ではないのでおまけです。以下にも色々纏まってました。
日々プロキシで苦しむ人の為のプロキシ設定まとめ
PowerShell
PowerShellでHttpやFtpのWebリクエストを行う際にIEエンジンを使用する為、デフォルトではWinInetを参照します。
ただし、WebRequest クラスのDefaultWebProxy プロパティにProxyを設定すると、WinInetの設定より優先して参照します。
この設定はPowerShellのウィンドウを閉じると初期化されます。
PS C:\Windows\system32> Invoke-WebRequest https://www.google.com -UseBasicParsing
StatusCode : 200
StatusDescription : OK
Content : <!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ja"><head><meta conten
t="世界中のあらゆる情報を検索するためのツールを提供しています。さまざまな検索機能を活用して、お探し
の情報を見つけてください。" name="description"><meta content="n...
~(中略)~
ParsedHtml :
RawContentLength : 48411
# 現在の設定を表示
PS C:\Windows\system32> [System.Net.WebRequest]::DefaultWebProxy
Credentials
-----------
# プロキシホストの設定(認証情報無し)
PS C:\Windows\system32> [System.Net.WebRequest]::DefaultWebProxy = New-Object System.Net.WebProxy "http://192.168.0.1:80"
PS C:\Windows\system32> [System.Net.WebRequest]::DefaultWebProxy
Address : http://192.168.0.1/
BypassProxyOnLocal : False
BypassList : {}
Credentials :
UseDefaultCredentials : False
BypassArrayList : {}
# 存在しないプロキシなので疎通できなくなる
PS C:\Windows\system32> Invoke-WebRequest https://www.google.com -UseBasicParsing
Invoke-WebRequest : リモート サーバーに接続できません。
発生場所 行:1 文字:1
+ Invoke-WebRequest https://www.google.com -UseBasicParsing
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest]、WebExce
ption
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
PS C:\Windows\system32> curl https://www.google.com -UseBasicParsing
curl : リモート サーバーに接続できません。
発生場所 行:1 文字:1
+ curl https://www.google.com -UseBasicParsing
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest]、WebExce
ption
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
なお、PowerShell 7.0以降ではHttpClient.DefaultProxy プロパティを使用してプロキシ構成を決定します。
このプロパティの値は、プラットフォームによって決まります。
- Windowsの場合:環境変数からプロキシ構成を読み取ります。これらの変数が定義されていない場合、プロパティはユーザーのプロキシ設定から取得されます。
参考
PowerShellでInternet Explorerエンジンエラーが発生する
Invoke-WebRequest(Microsoft.PowerShell.Utility)-PowerShell | Microsoft Docs
Invoke-WebRequest(Microsoft.PowerShell.Utility)-PowerShell 7 | Microsoft Docs
Firefox
Firefox>メニュー>オプション>ネットワーク設定>接続設定
Firefoxは他ブラウザと異なり、システムから独立したプロキシ設定も可能です。
Visual Studio Code
http.proxySupportキーがoverrideの時は環境変数のhttps_proxyを参照します。(デフォルト設定)
※システムのプロキシ設定は参照しません。
-
Ctrl
+,
もしくは Manage>Settingsで設定画面を開く - 右上タブの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.
参考
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.1
のport:80
(そんなプロキシサーバーは実際には存在しません)を一度WinInetに設定してすぐ削除した覚えがありました。
ただ、上項目「システムのプロキシ設定」が全て未設定な事と、npm config
が未設定な事を確認して、
念の為npm config delete
もしてみましたがエラーが解消できなかったので、どこにプロキシ設定が隠れているんだ...と頭を悩ませていたら、
何故か環境変数に設定が残っていたので、削除したところ無事解決できました!
まとめ
- プロキシ設定箇所は1つではない。
- ソフトによって参照しているプロキシ設定箇所は異なる。
他にも設定する場所あるよ!とかあれば是非コメントください。