본문 바로가기
IT

ERR_CONNECTION_REFUSED — 연결이 거부됨 에러 원인·해결·예방

by 샤나엘 2026. 6. 23.
반응형

ERR_CONNECTION_REFUSED — 연결이 거부됨 에러 원인·해결·예방

크롬에서 사이트나 로컬 개발 서버에 접속하려는데 "ERR_CONNECTION_REFUSED" 또는 "사이트에 연결할 수 없음 / 연결이 거부되었습니다"가 뜬다면, 도메인 주소까지는 제대로 찾았지만 그 IP의 서버가 연결을 받아주지 않은 것이다. 앞 글의 NXDOMAIN이 "주소를 못 찾음(DNS 단계)"이었다면, 이번에는 "주소는 찾았는데 문을 안 열어 줌(TCP 연결 단계)"이다.

 

연결이 거부됐다는 것은 그 IP·포트에서 들어주는 서비스가 없거나, 방화벽이 막았거나, 서버가 명시적으로 거부했다는 뜻이다. 로컬 개발에서 서버를 안 켰을 때도 단골로 만난다. 이 글은 이 에러의 의미, 자주 나오는 원인, 진단 명령, 단계별 해결, 그리고 비슷한 연결 오류와의 차이까지 정리한다.

ERR_CONNECTION_REFUSED

 

이 글의 구성

 

🔎ERR_CONNECTION_REFUSED 의미
🧩자주 나오는 발생 원인 5가지
💻재현 시나리오와 진단 명령
🛠해결 방법과 단계별 진단
⚖️비슷한 연결 오류와의 차이
💬자주 묻는 질문 5가지

🔎 ERR_CONNECTION_REFUSED 의미

이 에러도 HTTP 상태 코드가 아니라 크롬(크로미엄 계열)이 표시하는 네트워크 오류다. 브라우저가 도메인을 IP로 찾는 데까지는 성공했지만, 그 IP의 특정 포트로 TCP 연결을 시도했을 때 서버가 적극적으로 거부(연결 거부)한 상황이다.

항목 내용
에러 코드 ERR_CONNECTION_REFUSED
표시 환경 크롬 등 크로미엄 계열 브라우저
한글 의미 서버가 연결 요청을 거부함
실패 단계 TCP 연결(DNS 성공, HTTP 이전)
핵심 그 IP·포트에서 받아 줄 서비스가 없거나 차단됨

"거부됨(refused)"이라는 단어가 핵심이다. 서버가 무응답으로 시간을 끄는 게 아니라, 그 포트에서 듣는 서비스가 없어 운영체제가 즉시 "연결 거부" 신호(RST)를 돌려준 것이다. 그래서 보통 빠르게 에러가 뜬다. 한참 빙빙 돌다가 실패하면 그건 거부가 아니라 타임아웃에 가깝다(뒤에서 비교).

핵심 관찰 — 주소는 찾았다, 문을 안 열어 줄 뿐

DNS는 성공했으므로 도메인·DNS 문제는 아니다. 시선은 "그 IP·포트의 서버가 살아서 듣고 있는가"로 향한다. 로컬 개발이면 서버를 켰는지·포트가 맞는지, 운영이면 서비스 프로세스와 방화벽을 본다.


🧩 자주 나오는 발생 원인 5가지

원인 1 — 서버·서비스가 안 떠 있음

가장 흔하다. 웹 서버 프로세스가 죽었거나, 아직 시작 전이거나, 해당 포트에서 듣고 있지 않으면 운영체제가 연결을 즉시 거부한다. 로컬에서 개발 서버를 안 켜고 접속하는 경우가 대표적이다.

원인 2 — 잘못된 포트

서버는 떠 있는데 다른 포트에서 듣는 경우다. 주소에 틀린 포트(:3000, :8080 등)를 붙였거나, 서비스 포트가 바뀐 줄 모르고 옛 포트로 접속하면 그 포트에는 받아 줄 서비스가 없어 거부된다.

원인 3 — 방화벽·보안 정책 차단

로컬 방화벽·백신, 서버 방화벽, 클라우드 보안그룹이 해당 포트를 막으면 연결이 거부되거나 차단된다. 서버는 정상이어도 포트가 외부에 열려 있지 않으면 닿지 못한다.

원인 4 — 브라우저·프록시·확장프로그램

잘못된 프록시 설정, 손상된 브라우저 캐시, 연결을 가로채는 보안 확장프로그램이 원인일 수 있다. 다른 브라우저·시크릿 모드에서는 잘 되면 이쪽 문제로 좁혀진다.

원인 5 — VPN·네트워크·ISP 차단

VPN·프록시 오설정, 공용 네트워크의 포트 차단, 일부 사이트에 대한 망 차단이 연결 거부로 나타날 수 있다. VPN을 끄거나 다른 네트워크로 바꿔 보면 원인을 가려낼 수 있다.


💻 재현 시나리오와 진단 명령

이 에러는 명령으로 "서버가 그 포트에서 듣고 있는가"를 확인하는 것이 핵심이다. 먼저 서버 안에서 포트가 열려 있는지 본다.

# 해당 포트를 듣고 있는 프로세스 확인 (Linux)
ss -tlnp | grep 3000
# (구형 환경) netstat -tlnp | grep 3000

# ✗ 아무것도 안 나오면 그 포트에 듣는 서비스가 없음 → 거부

서버 내부 또는 같은 네트워크에서 직접 연결해 본다. 거부되면 서비스·포트 문제, 무응답이면 방화벽·네트워크 문제로 갈린다.

# ✓ 로컬에서 직접 요청해 보기
curl -v http://localhost:3000

# 특정 호스트·포트 연결 테스트
curl -v http://example.com:8080

# 거부 시 메시지
curl: (7) Failed to connect to localhost port 3000: Connection refused

서버는 떴는데 외부에서만 거부된다면 방화벽·포트 개방을 점검한다.

# 방화벽 상태 확인·포트 허용 (Ubuntu ufw 예시)
sudo ufw status
sudo ufw allow 3000/tcp

# 클라우드는 보안그룹·방화벽 규칙에서 해당 포트 인바운드 허용

🛠 해결 방법과 단계별 진단

연결 거부는 "서버·포트·방화벽" 셋 중 하나다. 사용자라면 내 환경을, 개발자·운영자라면 서버와 방화벽을 본다.

입장 해결 방법
방문자 새로고침·잠시 후 재시도, 다른 기기·네트워크, 시크릿 모드로 확인
브라우저 캐시 삭제, 프록시 설정 해제, 보안 확장프로그램·VPN 끄기
로컬 개발 개발 서버 실행 여부·포트 확인, curl localhost로 직접 테스트
서버 서비스 프로세스·포트 listen 확인(ss), 서비스 재시작
방화벽 로컬·서버 방화벽·클라우드 보안그룹에서 포트 인바운드 허용

단계별 진단 절차

01다른 사이트는 되는지, 다른 기기·시크릿 모드에서는 되는지 확인해 범위를 좁힌다.
02로컬 개발이면 서버를 실제로 켰는지, 포트가 맞는지부터 본다. 안 켠 경우가 의외로 많다.
03ss로 그 포트를 듣는 프로세스가 있는지, curl localhost로 직접 응답이 오는지 확인한다.
04서버 안에서는 되는데 밖에서만 거부되면 방화벽·보안그룹에서 포트 인바운드를 연다.
05브라우저 캐시·프록시·VPN·확장프로그램을 점검한다. 사용자 측 원인을 마지막으로 배제한다.

⚖️ 비슷한 연결 오류와의 차이

연결이 안 될 때 뜨는 오류는 실패한 "단계"와 "방식"으로 구분한다. 특히 거부와 타임아웃을 헷갈리지 않는 게 중요하다.

오류 단계·방식 의미
CONNECTION_REFUSED TCP·즉시 거부 포트에 듣는 서비스 없음·명시적 거부(빠름)
CONNECTION_TIMED_OUT TCP·무응답 응답이 없어 시간 초과(방화벽 drop 등, 느림)
NXDOMAIN DNS 도메인을 IP로 못 바꿈(주소 못 찾음)
502 HTTP(프록시) 프록시 뒤 업스트림 응답이 깨짐

거부와 타임아웃의 차이가 진단의 갈림길이다. 거부는 운영체제가 "그 포트엔 아무도 없다"며 즉시 RST를 보내 빠르게 실패한다. 반면 타임아웃은 방화벽이 패킷을 조용히 버리거나 서버가 응답하지 않아, 한참 기다리다 실패한다. 빠르게 실패하면 서비스·포트를, 오래 걸리다 실패하면 방화벽·네트워크를 먼저 의심한다.

거부는 빠르게, 타임아웃은 천천히 실패한다. 실패 속도가 곧 단서다. 빠르면 포트, 느리면 방화벽.

 

— DNS는 성공, 연결에서 막혔다


💬 자주 묻는 질문 5가지

Q1이 에러는 내 문제인가요, 사이트 문제인가요?

둘 다 가능합니다. 다른 기기·네트워크에서 잘 열리면 내 환경(프록시·방화벽·확장프로그램) 문제이고, 어디서도 안 되면 서버가 다운됐거나 포트가 닫힌 사이트 문제입니다. 다른 환경에서 시도해 보는 것이 가장 빠른 구분법입니다.

Q2localhost 개발 서버에서 자꾸 떠요.

서버를 실제로 켰는지, 그리고 접속하는 포트가 서버가 듣는 포트와 같은지 확인하세요. ss나 curl http://localhost:포트로 직접 테스트하면 됩니다. 서버 로그가 "listening on 3000"인데 8000으로 접속하면 당연히 거부됩니다.

Q3REFUSED와 TIMED_OUT은 뭐가 다른가요?

REFUSED는 서버가 "그 포트엔 아무도 없다"며 즉시 거부해 빠르게 실패하고, TIMED_OUT은 응답이 아예 없어 한참 기다리다 실패합니다. 보통 거부는 서비스·포트 문제, 타임아웃은 방화벽이 패킷을 버리거나 네트워크가 막힌 문제입니다.

Q4서버는 켜져 있는데 밖에서만 거부돼요.

방화벽·보안그룹에서 해당 포트가 외부에 열려 있지 않은 경우입니다. 또는 서버가 127.0.0.1(로컬)에만 바인딩돼 있어 외부 접속을 못 받는 경우도 흔합니다. 0.0.0.0으로 바인딩하고 방화벽 인바운드 규칙을 확인하세요.

Q5VPN을 켜니 이 에러가 떠요.

VPN·프록시가 연결 경로나 포트를 가로채면서 거부가 발생할 수 있습니다. VPN을 끄고 접속해 정상이면 VPN·프록시 설정 문제입니다. 회사·공용 네트워크라면 해당 포트가 정책상 차단됐을 수도 있습니다.


📌 결론

ERR_CONNECTION_REFUSED는 "주소는 찾았지만 서버가 연결을 받아주지 않는다"는 TCP 연결 단계의 신호다. NXDOMAIN이 주소 자체를 못 찾은 것이었다면, 이 에러는 주소는 찾고 문 앞까지 갔는데 문이 닫혀 있는 상황이다. 그래서 시선은 도메인이 아니라 "그 포트의 서버"로 향한다.

실무 원칙은 다음과 같다.

 

🔌 서버가 그 포트에서 살아 듣고 있는지부터 본다. 로컬이면 서버 실행·포트 확인이 1순위다.

🧱 서버는 떴는데 밖에서만 거부되면 방화벽·보안그룹의 포트 개방과 바인딩 주소를 점검한다.

🔁 거부와 타임아웃을 구분한다. 빠르게 실패하면 포트, 느리게 실패하면 방화벽·네트워크다.

CONNECTION_REFUSED 트러블슈팅 체크리스트

 

01다른 사이트·기기·시크릿 모드로 내 환경 vs 서버 문제 구분.
02로컬 개발 서버 실행 여부·접속 포트 일치 확인.
03ss로 포트 listen 확인, curl localhost로 직접 응답 테스트.
04밖에서만 거부면 방화벽·보안그룹 포트 인바운드 허용.
05서버 바인딩 주소(127.0.0.1 vs 0.0.0.0) 확인.
06브라우저 캐시·프록시·VPN·보안 확장프로그램 점검.
07실패 속도로 거부(빠름)·타임아웃(느림) 구분해 원인 좁히기.

본 글은 ERR_CONNECTION_REFUSED 에러의 일반적 원인과 해결 방법을 정리한 자료다. 서버·방화벽·네트워크 설정 변경은 영향 범위를 확인한 뒤 신중히 적용한다.

 

#ERR_CONNECTION_REFUSED #연결거부 #ConnectionRefused #크롬에러 #포트오류 #방화벽 #서버다운 #localhost #네트워크오류 #ss명령 #REFUSED와TIMEOUT차이 #웹브라우저 #로컬서버 #보안그룹 #트러블슈팅

반응형

댓글