「nc -vz では接続できるのに curl だと失敗する」
「ポート疎通はOKなのにHTTP通信だけNG」
「curlだけ timeout / reset される」
この現象は非常に実務で多く、しかも ネットワーク担当・アプリ担当で認識がズレやすい典型トラブルです。
本記事では、 なぜ nc は通るのに curl は通らないのかを構造的に整理し、 そのまま実行できる切り分け手順と具体的対策を解説します。
目次
まず結論:ncとcurlは「確認しているレイヤ」が違う
| ツール | 確認内容 |
|---|---|
| nc | TCP接続できるか(L4) |
| curl | TCP + HTTP/HTTPS通信(L7) |
つまり、
- ncが通る → TCP接続は可能
- curlが失敗 → HTTP/HTTPSレイヤの問題
「通信できているように見えて、実はアプリ層で拒否されている」 のが正体です。
① HTTP/HTTPSサービス自体が起動していない
ポートはLISTENしているが、 HTTPを処理するアプリが動いていないケースです。
# ポートLISTEN確認
ss -lntp | grep 80
ss -lntp | grep 443
典型例
- 別プロセスがポートを掴んでいる
- ミドルウェアが異常状態
対策
- プロセス名・PIDを確認
- systemdステータス確認
systemctl status nginx
systemctl status httpd
② HTTPS証明書エラー(curlは厳密、ncは無関係)
HTTPSでは証明書検証が行われます。
curl https://example.com
よくあるエラー
- 自己署名証明書
- 期限切れ証明書
- 中間証明書不足
確認方法
curl -v https://example.com
対策
- 正しい証明書チェーンを設定
- 一時確認なら -k(検証無効)
curl -k https://example.com
③ Hostヘッダ不一致(バーチャルホスト問題)
WebサーバはHostヘッダで振り分けします。
curl http://IPアドレス
↑ IP直打ちは想定外のVirtualHostに入ることがあります。
対策
# Hostヘッダを明示
curl -H "Host: example.com" http://IPアドレス
④ HTTPメソッド制限(GET以外拒否)
curlはデフォルトでGETですが、 設定によって拒否される場合があります。
確認
curl -v -X GET http://example.com
対策
- Webサーバ設定で許可メソッド確認
⑤ LB / WAF によるHTTPレベル遮断
LBやWAFはHTTP内容を見て遮断します。
典型例
- User-Agent制限
- 特定ヘッダ未指定で拒否
- HTTP/1.0拒否
確認
curl -v -A "Mozilla/5.0" http://example.com
対策
- LB/WAFログ確認
- User-Agent指定
⑥ HTTPレスポンスサイズ・タイムアウト問題
ncは接続確認だけなので影響を受けません。
典型例
- バックエンド応答が遅い
- LB idle timeout切れ
確認
curl -v --max-time 5 http://example.com
対策
- LB idle timeoutとKeepAlive見直し
あわせて読みたい


LB idle timeoutとアプリKeepAlive設計の落とし穴
ロードバランサ(LB)配下のシステムで、「通信が突然切れる」「一定時間後にRSTが返る」「再接続が頻発する」といった問題が発生する場合、LBのidle timeoutとアプリの…
あわせて読みたい


TCP KeepAlive設定の正しい考え方【有効化すれば安心ではない】
TCP KeepAlive は、 「有効にしておけば接続が安定する」 「TIME_WAITが減る」 と誤解されがちな機能です。 しかし実際には、 使い方を間違えると障害の温床 になること…
⑦ SELinuxがHTTP通信だけ拒否している
SELinuxはポート × プロセスで制御します。
確認
ausearch -m AVC -ts recent
対策
# HTTPポート許可
semanage port -l | grep http
即解決用 切り分けフロー
- ncでTCP接続確認
- curl -v で詳細確認
- 証明書・Hostヘッダ確認
- LB/WAFログ確認
- アプリログ確認
まとめ
「ncは通るがcurlは通らない」場合、
- TCPは問題ない
- HTTP/HTTPS層に原因がある
curl -v を起点に、HTTPレイヤで何が拒否されているかを追えば、 必ず原因に辿り着けます。
あわせて読みたい


DNSは引けるが特定ポートだけ通信できない原因
「DNSは正常に引ける」「pingも通る」「80番は通るのに443番だけNG」「同じIPなのにポートによって結果が違う」 この症状はネットワーク・OS・ミドルウェア・LBの どこ…
あわせて読みたい


DNSは引けるが通信できない時の切り分け
「名前解決はできているのに通信できない」「digやnslookupは成功するが、curlやncが失敗する」「pingは通るのにアプリ通信だけNG」 このトラブルは現場で非常に発生頻…
あわせて読みたい


RSTが多発する時の原因と切り分け
はじめに TCP通信において RST(Reset)パケットが多発する 状態は、「通信が強制的に切断されている」ことを意味します。 RSTは 正常系ではほぼ出ない ため、 アプリ障…
