Oracle Cloud 인스턴스에 Nginx를 설치하고 HTTPS를 적용하는 과정에서 인증서 발급을 위해 80번 포트를 개방해야 했습니다
일반적으로 Let’s Encrypt 인증서 발급 과정에서는 도메인 소유권 확인을 위해 외부에서 서버의 80번 포트로 접근할 수 있어야 합니다
처음에는 Oracle Cloud 콘솔에서 VCN 보안 목록의 Ingress Rule만 추가하면 바로 접속될 것이라고 생각했습니다

그래서 VCN 보안 목록에서 80, 443 포트를 개방했음에도 브라우저에서는 접속이 되지 않았고 Nginx와 Certbot 설정 과정에서도 정상적으로 외부 요청이 들어오지 않는 문제가 있었습니다
원인은 Oracle Cloud 보안 목록뿐만 아니라 인스턴스 내부의 iptables에서도 포트가 막혀 있었기 때문입니다
AWS EC2를 사용할 때는 보안 그룹에서 80,443 포트만 개방하면 외부접속이 가능했습니다
그래서 Oracle Cloud도 VCN 보안 그룹이 있길래 이것도 그러면 포트 개방하면 될 거라고 생각했는데 개방하고 Let’s Encrypt 인증서를 발급 받으려고 여러 번 시도해봤지만 계속 실패해서 외부 접속 자체가 안 되는 건 아닐지 테스트해보니 접속 자체가 되지 않아서 다른 문제가 있을 거라고 판단하고 Oracle 보안 그룹 관련된 내용을 찾아봤습니다
그러던 도중 Oracle Cloud 인스턴스에서 80번, 443번 포트를 열기 위해 iptables 설정이 필요할 수 있다는 내용을 확인하게 되었고, 아래 포스팅이 문제 해결에 많은 도움이 되었습니다
Opening up port 80 and 443 for Oracle Cloud servers
If you're using Oracle servers outside of Cleavr's integration, then here is what you'll need to do.
cleavr.io

Oracle 공식 문서에서도 인스턴스 접근 문제를 해결할 때 네트워크 보안 그룹, 보안 목록뿐만 아니라 인스턴스의 OS 방화벽 규칙도 함께 확인해야 한다고 안내하고 있습니다
문제 상황
Oracle Cloud에서 웹 서버를 운영하기 위해 다음 설정을 진행했습니다
- Nginx 설치
- 도메인 연결
- Oracle Cloud VCN 보안 목록에서 80, 443 포트 개방
- HTTPS 인증서 발급 시도
하지만 외부에서 도메인 또는 퍼블릭 IP로 접속했을 때 80번 또는 443번 포트가 정상적으로 열리지 않았습니다
이 경우 다음 두 가지를 모두 확인해야 합니다
- Oracle Cloud VCN 보안 목록에서 포트가 열려 있는지
- 인스턴스 내부 방화벽인 iptables에서 포트가 허용되어 있는지
Oracle Cloud 콘솔에서 보안 규칙을 추가했더라도 인스턴스 내부 iptables 설정에서 막혀 있다면 외부 요청이 서버까지 도달하지 못할 수 있습니다
현재 iptables 규칙 확인
먼저 인스턴스에 SSH로 접속한 뒤 현재 iptables 규칙을 확인합니다
sudo iptables -L -n --line-numbers
이 명령어를 실행하면 현재 INPUT 체인에 어떤 규칙이 있는지 확인할 수 있습니다
여기서 80번 또는 443번 포트에 대한 ACCEPT 규칙이 없다면 외부 요청이 차단될 수 있습니다
iptables란?
Linux 서버에서 사용하는 방화벽 설정 도구입니다 서버로 들어오거나 나가는 네트워크 패킷을 허용하거나 차단하는 역할을 합니다
80, 443 포트 허용하기
Nginx를 통해 HTTP와 HTTPS 요청을 처리하려면 80번과 443번 포트를 허용해야 합니다
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
위 명령어는 INPUT 체인의 6번째 위치에 80번, 443번 포트에 대한 허용 규칙을 추가합니다
여기서 --dport 80은 HTTP 요청을 의미하고, --dport 443은 HTTPS 요청을 의미합니다
변경 사항 저장하기
iptables 규칙은 명령어를 실행한 직후에는 적용되지만, 서버가 재부팅되면 사라질 수 있습니다.
따라서 변경한 규칙을 저장해야 합니다.
sudo netfilter-persistent save
만약 netfilter-persistent 명령어가 없다면 다음 명령어로 설치할 수 있습니다.
sudo apt update
sudo apt install netfilter-persistent
설치 후 다시 저장합니다.
sudo netfilter-persistent save
다시 확인하기
설정 후 다시 iptables 규칙을 확인합니다
sudo iptables -L -n --line-numbers
80번과 443번 포트에 대한 ACCEPT 규칙이 추가되어 있다면 정상적으로 적용된 것입니다

이후 Nginx 상태도 확인합니다
sudo systemctl status nginx

Nginx가 실행 중이라면 브라우저에서 도메인 또는 퍼블릭 IP로 접속하여 80, 443 포트가 정상적으로 열렸는지 확인합니다
정리
Oracle Cloud에서 웹 서버를 운영할 때는 단순히 VCN 보안 목록에서 포트를 여는 것만으로는 부족할 수 있습니다
외부 접속이 되기 위해서는 다음 설정이 모두 필요합니다
- Oracle Cloud VCN 보안 목록에서 80, 443 포트 개방
- 인스턴스 내부 iptables에서 80, 443 포트 허용
- Nginx가 정상적으로 실행 중인지 확인
- HTTPS 사용 시 인증서와 Nginx 설정 확인
저의 경우에도 Oracle Cloud 보안 목록에서는 포트를 열었지만 인스턴스 내부 iptables에서 막혀 있어 Nginx와 HTTPS 접속이 정상적으로 되지 않았습니다
iptables에 80, 443 포트 허용 규칙을 추가한 뒤 외부 접속 문제가 해결되었습니다
'DevOps' 카테고리의 다른 글
| [Oracle] Oracle Cloud MySQL HeatWave Always Free로 무료 MySQL DB 만들기 (0) | 2026.06.17 |
|---|---|
| [Oracle] 인스턴스 퍼블릭 IP 적용 후 SSH 접속 방법 (0) | 2026.06.17 |
| [Oracle] Oracle Cloud 인스턴스 생성 해보기 (0) | 2026.05.25 |
| [CI/CD] GitHub Actions와 Docker로 AWS EC2서버 CICD 구축 Docker Hub로 관리하고 배포하기 (0) | 2025.05.09 |
| [CI/CD] GitHub Actions와 Docker로 AWS EC2서버 CI/CD 구축 (우분투 서버 세팅 및 RDS 연결) (1) | 2025.05.09 |