가정용 환경에서 웹 서비스를 운영하기 위한 설치 설명서입니다. 별도 빠른 기종에 Ubuntu Server 24.04 LTS를 설치해 기준점으로 두고, 192.168.0.197 PC는 Ubuntu Server 22.04.5 LTS 중계서버로 사용합니다. 도메인과 443 HTTPS 포트 하나를 통해 내부 서비스, USB 역데터링을 활용한 스마트폰 서버, 게시판, 웹진을 안전하게 프록시하는 것이 핵심입니다.
공인 DNS, 공유기 443 포트, 192.168.0.199 HTTPS 프록시, 192.168.0.197 Ubuntu 중계서버, USB/ADB 스마트폰 서버까지 이어지는 운영 구조도입니다.
장비 역할 기준: 주 기종은 다른 빠른 PC 기종이며 Ubuntu Server 24.04 LTS를 사용합니다. 192.168.0.197은 현재 PC 사양의 Ubuntu Server 22.04.5 LTS 중계서버로, 웹 프록시와 USB 안드로이드 포워딩, 내부 서비스 연결을 담당합니다. 두 장비 모두 데스크톱판이 아니라 서버 버전으로 구축하는 것을 기준으로 합니다.
구축 목표
별도 빠른 기종의 Ubuntu 24.04 LTS 준비 (메인서버 또는 자체 서버) 공유기에서 아이피와 포트 포워딩 필수 (미니PC든 일반PC든 스마트폰이든 준비, 공유기 아이피에서 관리하기 편하게 끝자리수를 예:192.168.0.199), 리눅스 명령어에 익숙하지 않으면 VSCODE CODEX를 활용하는 것이 좋다. 설치만 된다면 그 이후 구축은 수월하다. 필자의 경우는 주 컴퓨터를 뉴스와 매거진 등 기록용과 웹셔핑, 개발용도와, 웹서버를 동시에 쓰기 때문에 서버형 보다는 데스탑용으로 윈도우처럼 이용하고 있다. - 직접 개발용과 서버용으로 운영시
192.168.0.197 Ubuntu Server 22.04.5 LTS 중계서버-PC 역할 분리 (메인 서버를 직접 쓰거나 경우에 따라 작업용 서버를 별도로 둔다. 주 컴퓨터가 윈도우를 쓰는 경우는 서버 전용 컴퓨터(우분투)를 두는 것이 좋다. 공유기에서 서버만 포워딩. 2개의 서버를 운영하면서 하나의 사양을 밝힌바 있다.)
Nginx + PHP-FPM + MariaDB 기본 웹 스택 설치
닷네임 기준 도메인 구입 후 DNS A/CNAME/TXT 레코드 연결 (도메인 구입 후 A 레토드에서 자신의 실질 아이피를 넣는다. 차후 https를 활용하기 위해 TXT값을 받아야 한다. 그 값을 추가로 넣는다.) Nginx설정값은 제미나이AI 등에서 얻을 수 있다. 443포트만 쓴다는 전제하에 설정값을 작성해야 한다.
가정용 공유기에서 443 포트만 웹 프록시 서버로 포워딩 (우분투에서 443 포트를 제외한 다른 모든 포트는 닫아야 한다. 그 경우 443포트가 자동으로 열리는 경우가 있다. 이 서버의 경우. 예로 든다면 192.168.0.199 서버 주소 포트는 443포트)
Nginx reverse proxy로 내부 서비스와 역데터링 스마트폰 서버를 한 도메인 아래 연결 설정 파일등은 내부 서버로 도는 것은 다른 포트도 가능하지만 결국 443포트에서 토스로 연결되는 것이다. 443포트 서버에서 서버와 서버로 토스에 토스형식이다. 서브 서버와 그 서버의 역 데터링 스마트폰 서버까지 토스형식이다. 중계서버에서 USB 연결된 서버들은 자체 내부 아이피를 갖춘 서버형식이다. 그 내부 아이피와 포트로 토스 주는 것이다. 결론은 443으로 들어온 회선이 중계 서버를 거쳐 USB 역 데터링 서버 아이피와 포트에 도달하는 형식이다. 그곳의 웹서버 웹 문서를 읽는 것이다. 이곳의 경우 2개의 스마트폰 서버는 해당 중계 PC에 연결된 상태이다.
보안서버 인증서 발급 시 TXT 값으로 도메인 소유 확인 (우분투 명령어 입력하면 코드값을 받을 수 있다. 그 값을 도메인 구입처에서 TXT 값을 추가로 입력해야 한다. 기타 등은 제미나이AI를 통해서 답을 얻을 수 있다.)
UFW 방화벽, SSH 키, 백업, 로그 회전, 자동 복구 타이머 구성 포트 리스트를 보고 443포트 외엔 모두 삭제하는 것이 좋다. 우분투 이용시
추가 설치 프로그램 3,4번째 스마트폰 서버 등등
nginx 443 HTTPS 진입점과 reverse proxy 담당
php-fpm php-cli php-mysql php-curl php-mbstring php-xml php-gd php-zip PHP 기반 포털, 게시판, 관리 도구 실행
mariadb-server 또는 mysql-server 그누보드/메신저/게시판 DB 저장소
certbot python3-certbot-nginx Let’s Encrypt 인증서 자동 발급과 갱신
openssh-server ufw fail2ban 원격 관리와 기본 보안
adb android-tools-adb USB 역데터링 스마트폰 서버 포워딩과 복구
git curl unzip rsync jq cron logrotate dnsutils 소스 배포, 점검, 백업, DNS TXT 전파 확인, 운영 자동화
IP / DNS / Nginx
PC 서버별 IP 설정값과 Nginx 연결 참고
공인 IP는 보안상 일부를 가렸고, 내부망 IP와 USB 역데터링 스마트폰 서버 IP는 운영 점검용으로 그대로 정리했습니다. 프록시는 외부 443 하나로 받은 요청을 내부 PC와 스마트폰 서버로 순서대로 넘기는 구조이므로, 각 단계의 입력값과 출력값을 함께 봐야 합니다.
프록시 흐름 상세
1. 도메인 DNSmobile.netcity.co.kr 등 A 레코드가 114.108.53.xxx 공인 IP를 가리킴
2. 공유기 NAT외부 443/TCP 요청을 기준 프록시 PC인 192.168.0.199:443 또는 단일 중계 구성의 192.168.0.197:443으로 전달
3. 199 HTTPS 프록시TLS 인증서와 Host 헤더를 받고 /, /phone-monitor-vnc/ 등을 http://192.168.0.197로 proxy_pass
4. 197 중계서버실제 문서 루트와 게시판을 처리하고, 경로별로 127.0.0.1:18082, 18083, 18089 같은 내부 포트로 재분기
5. USB/ADB 포워딩adb forward가 PC 로컬 포트를 스마트폰의 8080/8082/8083/8084 서비스로 연결
6. 스마트폰 서버 응답Galaxy Wide3 10.0.0.2/32, LG-T540 192.168.42.129/24 또는 10.0.0.2/32에서 최종 웹 문서와 화면을 응답
핵심은 외부 방문자는 항상 도메인과 443 포트만 보지만, 내부에서는 Nginx가 Host, X-Forwarded-Proto, X-Forwarded-For 값을 넘기며 PC 서버와 USB 스마트폰 서버로 순차 전달한다는 점입니다.
IP 설정 목록
공인 DNS 진입점
netcity.co.kr, www, mobile, magazine, blogzine, news 공통 A 레코드
공인 IP
114.108.53.xxx
외부 포트
443/TCP만 공개 기준, 80은 인증/리다이렉트 용도일 때만 사용
DNS 기준
닷네임 A 레코드에 공인 IP 입력, 인증서용 TXT 값은 별도 추가
프록시 시작
브라우저 요청: https://도메인/경로 -> 공유기 443 -> 내부 프록시 PC
192.168.0.199 공개 HTTPS 프록시 PC
현재 확인된 외부 진입 프록시 후보, mobile.netcity.co.kr을 197로 넘김
고정 IP
192.168.0.199/24
게이트웨이
192.168.0.1
DNS
8.8.8.8, 8.8.4.4
Nginx 역할
443 TLS 수신 후 http://192.168.0.197 로 reverse proxy
프록시 입력
공유기에서 받은 443 HTTPS, server_name mobile.netcity.co.kr
프록시 출력
proxy_pass http://192.168.0.197, VNC 경로도 197의 phone-monitor-vnc로 전달
192.168.0.197 Ubuntu 중계서버 PC
mobile.netcity.co.kr 본문과 USB 스마트폰 서버 중계
고정 IP
192.168.0.197/24
게이트웨이
192.168.0.1
DNS
8.8.8.8, 8.8.4.4 또는 공유기 DNS
별칭 IP
192.168.0.195/24, USB Android 중계 현황판과 8082/8083 포트용
별칭 경로
192.168.0.195는 197 서버 NIC의 추가 주소로, 게이트웨이와 DNS는 197 서버 값을 공유
단일 중계: 외부 443 -> 192.168.0.197:443
프록시 분리: 외부 443 -> 192.168.0.199:443
199 Nginx -> 192.168.0.197
197 Nginx -> USB 스마트폰 IP/포트
가정용 회선은 공개 포트를 최소화해야 합니다. 현재처럼 443 하나만 외부에 열고, Nginx가 내부의 PHP, 그누보드, USB 역데터링 스마트폰 서버, 메신저, 게시판으로 나누어 전달하는 방식이 가장 현실적입니다. 메일 수신처럼 25번 포트가 필요한 서비스는 가정용 환경에서 막힐 수 있으므로 웹 수신함, HTTPS 브릿지, 외부 메일 포워딩을 우선 검토합니다.
STEP 01
Ubuntu Server 설치와 고정 IP
주 기종 PC에는 Ubuntu Server 24.04 LTS를 설치하고 공유기에서 DHCP 예약 또는 Netplan으로 고정 IP를 잡습니다. 192.168.0.197 중계서버 PC는 Ubuntu Server 22.04.5 LTS로 두어 웹 프록시와 스마트폰 포워딩을 맡깁니다. 빠른 주 기종과 중계서버 역할을 분리하면 Nginx 프록시, PHP, DB, 스마트폰 포워딩, 게시판 운영이 동시에 돌아가도 병목이 줄어듭니다.
도메인은 닷네임에서 구입한 것을 기준으로 설명합니다. 닷네임의 도메인 레코드 관리(DNS)에서 A 레코드는 공인 IP로, 하위 서비스는 CNAME 또는 같은 A 레코드로 연결합니다. 레코드 관리가 보이지 않으면 닷네임 부가서비스용 네임서버를 사용하는지 먼저 확인합니다. 유동 IP라면 DDNS 또는 DNS API 자동 갱신을 준비합니다.
example.com A 공인IP
mobile.example.com A 공인IP
mail.example.com A 공인IP
STEP 04
보안서버 인증 TXT 값 입력
보안서버 인증서 발급 과정에서 도메인 소유 확인을 TXT 방식으로 선택하면 인증기관이 호스트 이름과 TXT 값을 제공합니다. 닷네임 DNS 관리에서 TXT 레코드를 추가하고, 받은 값을 그대로 붙여넣은 뒤 DNS 전파를 확인합니다. 예를 들어 ACME 방식은 보통 _acme-challenge 호스트에 긴 토큰 값을 넣습니다.
Certbot을 쓰거나, DNS TXT 인증 방식으로 443 HTTPS를 적용합니다. TXT 인증은 80 포트가 닫힌 가정용 환경에서도 도메인 소유 확인을 진행할 수 있어 443 중심 운영과 잘 맞습니다. SSH는 키 기반으로 바꾸고, UFW는 443과 내부 관리에 필요한 포트만 허용합니다.