はじめに
社内ネットワーク内にあるオンプレミスの GitLab を使って開発している環境で、突然 git clone
も git push
もできなくなりました
社内のブラウザでは普通にGitLabの画面が開けるのに、ターミナルでは謎の 503
エラー
原因を調査していった結果、意外なところに落とし穴がありました
社内プロキシを経由している環境では、同じようなトラブルに遭遇する可能性があるので、備忘録として残しておきます
発生したエラー
$ git clone http://<社内GitLabのホスト>/your-group/your-repo.git
Cloning into 'your-repo'...
fatal: unable to access 'http://<社内GitLabのホスト>/your-group/your-repo.git/': The requested URL returned error: 503
- ブラウザからは GitLab にアクセス可能
- curl でも
.git
にアクセス可能
$ curl -I http://<社内GitLabのホスト>/your-group/your-repo.git
HTTP/1.1 200 OK
...
GitLab自体は動いているのに、Git コマンドだけが通らないという状況でした
原因:no_proxy
の書き方ミス
環境変数 no_proxy
を次のように設定していたのが原因でした
export no_proxy='http://<社内GitLabのホスト>' # ← 間違い
no_proxy
は ドメイン名またはIPアドレス だけを指定する必要があります
http://
のようなスキームを含めてしまうと、Gitはこれを無視して proxy を通してしまいます
つまり、Git だけが proxy 経由でアクセスし、結果として 503
を返されていたようです
正しい設定方法
以下のようにスキームを除いて設定する必要があります
export no_proxy='<社内GitLabのホスト>' # ← 正しい
複数ドメインがある場合はカンマ区切りで指定します:
export no_proxy='localhost,127.0.0.1,<社内GitLabのホスト>'
解決までに試したこと
-
curl -I
→ 通信OK(GitLabは落ちていない) -
git config --global http.version HTTP/1.1
→ 効果なし -
GIT_CURL_VERBOSE=1 git clone ...
で通信ログ確認 - Proxy設定の確認・解除
- SSH経由での clone も検討(今回はそこまでせず原因に気づいた)
学んだこと
-
no_proxy
の書式ミスでも Git は503
を返す(しかも原因がわかりにくい) - Git の clone/push で謎の 503 エラーが出たら、proxy 設定を疑う
-
curl
やブラウザで通っても、Git の HTTP 通信は挙動が異なることがある
おわりに
今回のように、ちょっとした設定ミスが思わぬ落とし穴になります
もし同じように「GitLabにアクセスできるのに clone できない」というトラブルに遭遇した方の参考になれば、、
改めて思い返せば、そういや昨日、~/.bashrc
編集したな~、、それが原因なのは明白じゃん、、と反省しました
自分の行動を振り返ったほうがデバックは早いかもしれません