2026년 3월 20일 금요일

NextCloud 내부망 접속 문제 해결 가이드

 # NextCloud 내부망 접속 문제 해결 가이드

## 문제 상황

- **증상**: 내부망에서 `http://192.168.55.90:9090/` 접속 불가
- **환경**: 
  - NextCloud: Docker 컨테이너로 실행
  - 외부 도메인: `https://www.example.duckdns.org/nextcloud` (정상 작동)
  - 내부망: WiFi (192.168.55.0/24)
  - 서버: Ubuntu, Docker

## 진단 과정

### 1단계: 기본 연결 확인
```bash
# 서버 ping 테스트
ping 192.168.55.90
# ✅ 정상 응답

# Docker 컨테이너 상태 확인
sudo docker ps | grep nextcloud
# ✅ 컨테이너 실행 중

# 포트 리스닝 확인
sudo ss -tlnp | grep 9090
# ✅ 9090 포트 정상 리스닝

# 방화벽 확인
sudo ufw status
# ✅ 9090/tcp 허용됨
```

### 2단계: NextCloud 로그 분석
```bash
sudo docker logs --tail 50 nextcloud_nextcloud_1
```

**발견된 문제:**
- 내부 IP(192.168.55.100)에서 접속 시 **302 리다이렉트 루프** 발생
- HTTPS 요청이 HTTP 포트로 들어와 **400 에러**
- 외부 도메인(`www.example.duckdns.org`)으로 강제 리다이렉트

### 3단계: 설정 파일 확인
```bash
sudo docker exec nextcloud_nextcloud_1 cat /var/www/html/config/config.php
```

**문제 원인 발견:**
```php
'overwrite.cli.url' => 'https://www.example.duckdns.org/nextcloud',
'overwritewebroot' => '/nextcloud',
'overwriteprotocol' => 'https',
'overwritehost' => 'www.example.duckdns.org',
```

NextCloud가 모든 접속을 외부 HTTPS 도메인으로 리다이렉트하도록 설정됨.

## 시도했던 해결 방법들

### 방법 1: overwritecondaddr 설정 (실패)

내부망 IP 대역에서는 overwrite 설정을 무시하도록 시도:
```bash
sudo docker exec -u www-data nextcloud_nextcloud_1 php occ config:system:set overwritecondaddr --value='^192\.168\.55\.'
```

**실패 원인:**
- 설정 위치가 잘못됨 (파일 맨 아래)
- 설정이 중복 추가됨
- NextCloud의 리다이렉트 로직이 복잡하여 제대로 작동 안 함

### 방법 2: Docker 설정 수정 시도 (실패)

컨테이너 내부 설정 직접 수정 시도:
```bash
sudo docker exec -it nextcloud_nextcloud_1 bash
cd /var/www/html/config
```

**문제:**
- `nano`, `vi` 에디터 모두 설치 안 됨
- `sed` 명령으로 수정했으나 설정 순서 문제로 작동 안 함
- 외부 접속까지 망가짐

## 최종 해결 방법: /etc/hosts 수정 ✅

NextCloud 설정을 건드리지 않고, **클라이언트 측에서 DNS 우회**

### 구현

**내부 PC (192.168.55.100)에서:**
```bash
sudo nano /etc/hosts
```

**파일 맨 아래 추가:**
```
192.168.55.90   www.example.duckdns.org example.duckdns.org
```

### 검증
```bash
ping www.example.duckdns.org
# PING www.example.duckdns.org (192.168.55.90) 56(84) bytes of data.
# 64 bytes from www.example.duckdns.org (192.168.55.90): icmp_seq=1 ttl=64 time=1.99 ms
```

### 접속

브라우저에서:
```
https://www.example.duckdns.org/nextcloud
```

**✅ 정상 접속!**

## 작동 원리
```
┌─────────────────────────────────────────────────────────┐
│ 외부 접속 (LTE)                                          │
│ www.example.duckdns.org                                  │
│         ↓                                                │
│ DNS 서버 → 공인 IP (58.224.12.87)                       │
│         ↓                                                │
│ 포트 포워딩 → 서버 (192.168.55.90:9090)                 │
│         ↓                                                │
│ NextCloud (HTTPS)                                        │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│ 내부 접속 (WiFi)                                         │
│ www.example.duckdns.org                                  │
│         ↓                                                │
│ /etc/hosts → 192.168.55.90 (내부 IP)                    │
│         ↓                                                │
│ 직접 연결 → 서버 (192.168.55.90:9090)                   │
│         ↓                                                │
│ NextCloud (HTTPS)                                        │
└─────────────────────────────────────────────────────────┘
```

## 주의사항

### HTTPS 인증서 경고

내부망에서 접속 시 SSL/TLS 인증서 경고가 발생할 수 있음:

**원인:**
- Let's Encrypt 인증서는 공인 IP용으로 발급됨
- 내부 IP로 접속하면 도메인 불일치

**해결:**
1. 브라우저에서 "위험을 무릅쓰고 계속" 클릭
2. 또는 "예외 추가"
3. **보안상 문제 없음** (내부망이므로)

### 다른 내부 PC에도 적용

각 클라이언트 PC의 `/etc/hosts`에 동일하게 추가 필요:
```bash
# 각 PC에서 실행
sudo nano /etc/hosts

# 추가
192.168.55.90   www.example.duckdns.org example.duckdns.org
```

## 최종 결과

| 접속 위치 | URL | 상태 |
|----------|-----|------|
| 외부 (LTE) | `https://www.example.duckdns.org/nextcloud` | ✅ 정상 |
| 내부 (WiFi) | `https://www.example.duckdns.org/nextcloud` | ✅ 정상 |
| 내부 (WiFi) | `http://192.168.55.90:9090/` | ❌ 사용 안 함 |

## 참고: 왜 9090 포트 직접 접속이 안 되는가?
```bash
# NextCloud 설정 확인
sudo docker exec nextcloud_nextcloud_1 cat /var/www/html/config/config.php
```
```php
'overwrite.cli.url' => 'https://www.example.duckdns.org/nextcloud',
'overwritewebroot' => '/nextcloud',  // ← 서브 경로 설정
```

- Docker 컨테이너는 루트(`/`)에서 NextCloud 실행
- 하지만 설정은 `/nextcloud` 서브경로를 요구
- 따라서 `http://192.168.55.90:9090/nextcloud`는 404 에러
- `http://192.168.55.90:9090/`는 리다이렉트 루프

**해결책:** 도메인으로만 접속 (hosts 파일 수정 활용)

## 교훈

1. **NextCloud의 overwrite 설정은 복잡함**
   - `overwritecondaddr`가 항상 작동하는 것은 아님
   - 설정 순서와 위치가 중요

2. **NAT Loopback(헤어핀 NAT) 문제**
   - 내부망에서 공인 IP로 접속 불가능한 라우터 존재
   - `/etc/hosts`가 가장 간단하고 확실한 해결책

3. **Docker 컨테이너 내부 편집 어려움**
   - 최소 이미지는 에디터 미포함
   - 호스트에서 `docker exec` 명령 활용 필요

## 추가 최적화 (선택사항)

### 내부망 전용 도메인 설정

로컬 DNS 서버(Pi-hole, dnsmasq 등) 사용 시:
```
# DNS 서버에 등록
www.example.duckdns.org → 192.168.55.90
```

모든 내부 PC에서 자동 적용됨 (개별 hosts 수정 불필요)

---

**작성일:** 2026-03-20  
**해결 시간:** 약 1시간  
**난이도:** 중급

댓글 없음:

NextCloud 내부망 접속 문제 해결 가이드

 # NextCloud 내부망 접속 문제 해결 가이드 ## 문제 상황 - **증상**: 내부망에서 `http://192.168.55.90:9090/` 접속 불가 - **환경**:    - NextCloud: Docker 컨테이너로 실행   - 외부 도...