상단 광고 영역 (AdSense)
컴퓨터·인공지능

오라클 클라우드 외부 접속 문제 해결기

👁️ 조회 18
상단 광고 영역 (AdSense)

Oracle Cloud Ubuntu에서 Node.js + Nginx가 실행되는데 외부 접속이 되지 않는 문제 해결기
 

이번 프로젝트는 Oracle Cloud Infrastructure(OCI)의 Always Free VM을 이용하여 Node.js 기반 블로그를 구축하는 과정에서 발생한 실제 장애를 기록한 내용이다.

본문 중간 광고 영역 (AdSense)


# 개발 환경


* Oracle Cloud Infrastructure (Always Free)
* Ubuntu 24.04 LTS
* Node.js 18
* Express 5
* PostgreSQL 17 (Docker)
* Nginx Reverse Proxy
* HeidiSQL (SSH Tunnel)


# 문제 발생


Node 서버는 정상적으로 실행되었고 Node 서버는 정상적으로 응답하고 있었다.
Nginx 역시 정상적으로 동작했다.

sudo systemctl status nginx
active (running)

포트도 정상적으로 열려 있었다.
sudo ss -tlnp | grep :80
LISTEN 0 511 0.0.0.0:80

그런데 외부에서는 접속이 되지 않았다.

브라우저에서 http://151.xxx.xxx.xxx
접속결과
ERR_CONNECTION_TIMED_OUT

휴대폰 LTE에서도 동일하였다.
 


# 처음 의심했던 원인


가장 먼저 Oracle Cloud 네트워크를 의심했다.

확인한 내용

* Security List
* Ingress Rule
* Port 80
* Port 443
* Route Table
* Internet Gateway
* Public Subnet

모든 설정은 정상이었다.
 

 

# 다음으로 확인한 것


Ubuntu 방화벽(UFW)

sudo ufw status
결과

80/tcp ALLOW
443/tcp ALLOW
22/tcp ALLOW

역시 문제는 아니었다.

 


# Nginx도 의심


Proxy 설정

server {
    listen 80;
    server_name _;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

구문 검사

sudo nginx -t
syntax is ok

Nginx도 정상이었다.

 

 

# access.log를 확인



sudo tail -f /var/log/nginx/access.log

브라우저에서 접속해도 아무것도 기록되지 않았다.
즉,  요청 자체가 Nginx까지 도달하지 못하고 있었다.

 


# 진짜 원인 발견


iptables 확인

sudo iptables -S
결과

-P INPUT DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A ufw-user-input -p tcp --dport 80 -j ACCEPT

여기서 중요한 사실을 발견했다.

INPUT 체인 중간에 REJECT 규칙이 존재하였다.

iptables는 위에서 아래로 검사한다.

SSH 허용

REJECT

UFW의 80 허용

80번 허용 규칙까지 도달하기 전에 이미 REJECT되어 버렸다.
따라서,

* SSH 가능
* Node 정상
* Nginx 정상
* Oracle Security List 정상

그런데도 외부 접속은 모두 차단되었다.
 


# 해결 방법


규칙 번호 확인

sudo iptables -L INPUT --line-numbers

문제의 REJECT 규칙 삭제

sudo iptables -D INPUT <번호>

삭제 후 브라우저 새로고침

정상적으로 접속되었다.
 

 

# 재부팅 테스트


혹시 임시 해결인지 확인하기 위해

sudo reboot

재부팅 후

http://서버IP 다시 접속

정상 동작하였다.

Node를 실행한 후 http://서버IP/login

로그인 화면도 정상적으로 표시되었다.

 


# 이번 문제를 통해 배운 점


외부 접속이 되지 않을 때는 다음 순서대로 확인하는 것이 가장 효율적이다.

 

1. Node 서버 실행 여부


ps -ef | grep node
 


2. 포트 확인


ss -tlnp
 


3. Nginx 상태


sudo systemctl status nginx
 


4. localhost 확인


curl http://127.0.0.1:3000
 


5. access.log 확인


sudo tail -f /var/log/nginx/access.log
 


6. UFW 확인
 

sudo ufw status
 


7. iptables 확인


sudo iptables -S


 

8. Oracle Cloud Security List 확인
 


# 결론


이번 문제는 Oracle Cloud의 설정 문제가 아니었다.
Node.js도 정상, Nginx도 정상, Oracle Security List도 정상이었다.
실제 원인은 Ubuntu의 iptables 규칙 중간에 존재하던 REJECT 규칙이었다.
겉으로는 단순한 "접속 불가"처럼 보였지만, 실제로는 Linux 방화벽 규칙의 실행 순서 때문에 발생한 문제였다.
이번 경험을 통해 Linux 서버를 운영할 때는 단순히 UFW만 확인하는 것이 아니라 iptables의 실제 규칙 순서까지 확인해야 한다는 것을 배울 수 있었다.

본문 하단 광고 영역 (AdSense)
CC BY NC ND
이 글은 작성자에 의해 댓글이 비활성화되었습니다.
본문 하단 광고 영역 (AdSense)