메인으로원본 문서

Ubuntu Home Web Server Guide

가정용 인터넷 우분투 서버부터 Nginx 프록시까지

가정용 환경에서 웹 서비스를 운영하기 위한 설치 설명서입니다. 별도 빠른 기종에 Ubuntu Server 24.04 LTS를 설치해 기준점으로 두고, 192.168.0.197 PC는 Ubuntu Server 22.04.5 LTS 중계서버로 사용합니다. 도메인과 443 HTTPS 포트 하나를 통해 내부 서비스, USB 역데터링을 활용한 스마트폰 서버, 게시판, 웹진을 안전하게 프록시하는 것이 핵심입니다.

Ubuntu 서버, Nginx 프록시, 내부 IP, 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. 1. 도메인 DNS mobile.netcity.co.kr 등 A 레코드가 114.108.53.xxx 공인 IP를 가리킴
  2. 2. 공유기 NAT 외부 443/TCP 요청을 기준 프록시 PC인 192.168.0.199:443 또는 단일 중계 구성의 192.168.0.197:443으로 전달
  3. 3. 199 HTTPS 프록시 TLS 인증서와 Host 헤더를 받고 /, /phone-monitor-vnc/ 등을 http://192.168.0.197로 proxy_pass
  4. 4. 197 중계서버 실제 문서 루트와 게시판을 처리하고, 경로별로 127.0.0.1:18082, 18083, 18089 같은 내부 포트로 재분기
  5. 5. USB/ADB 포워딩 adb forward가 PC 로컬 포트를 스마트폰의 8080/8082/8083/8084 서비스로 연결
  6. 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 서버 값을 공유
역할
Nginx, PHP, MariaDB/Docker, 게시판, 스마트폰 포워딩
포워딩
127.0.0.1:18080/18082/18083, LG 18024/18088/18089
프록시 입력
199 프록시 또는 공유기에서 들어오는 HTTP/HTTPS 내부 요청
프록시 출력
경로별로 로컬 PHP, 192.168.0.195 별칭, ADB 포워딩 포트, LG-T540 포트로 분배
192.168.0.191 쇼룸/테스트 PC 서버

쇼룸 게시판과 보조 웹 루트 운영 후보, 점검 시 전원/랜/IP 확인 필요

서버 IP
192.168.0.191/24
게이트웨이
192.168.0.1
DNS
8.8.8.8, 8.8.4.4 또는 공유기 DNS
보조 IP
192.168.0.102가 잡힌 이력이 있어 중복 여부 확인
Nginx 루트
/var/www/html/192.168.0.191
상태 메모
접속 불안정 시 ARP 응답, 공유기 DHCP 예약, 랜 케이블 순서 확인
프록시 기준
외부 직접 공개보다는 199/197 중계에서 별도 location을 만든 뒤 proxy_pass로 붙이는 방식 권장
역데터링 스마트폰 서버 IP

Galaxy Wide3와 LG-T540은 PC에 USB로 붙은 별도 저전력 서버 노드

Galaxy Wide3
tun0 10.0.0.2/32, Android 8080, Termux PHP 8082, Termux Nginx 8083, code-server 8084
Wide3 게이트웨이
USB 역테더링 터널 기준 10.0.0.1 계열 또는 연결 PC(197) 브릿지/NAT
Wide3 DNS
역테더링 앱 또는 197 중계 PC DNS 상속, 필요 시 8.8.8.8 / 8.8.4.4 지정
LG-T540
usb0 192.168.42.129/24, tun0 10.0.0.2/32, proot Ubuntu 22.04.5 armhf
LG 게이트웨이
usb0 대역은 192.168.42.1 계열, tun0 역테더링은 10.0.0.1 계열로 점검
LG DNS
역테더링/PC 공유 DNS 상속, proot Ubuntu 내부는 /etc/resolv.conf에서 8.8.8.8 / 8.8.4.4 확인
중계 방식
ADB forward 또는 내부 USB IP를 Nginx proxy_pass 대상으로 지정
최종 응답
스마트폰 내부 웹서버가 HTML, 게시판, 웹캠/스크린캐스트 화면을 만들고 197 중계서버가 공개 도메인으로 감싸서 보여줌

Nginx 설정값 참고

아래 값은 실제 구성 확인용 요약입니다. 전체 설정은 위의 “Nginx 설정값 참고” 버튼에서 열어 보고, 서버별 파일은 /etc/nginx/sites-available/ 아래에서 관리합니다.

199 공개 프록시에서 197로 넘기는 예
server_name mobile.netcity.co.kr;

location / {
    proxy_pass http://192.168.0.197;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

location ^~ /phone-monitor-vnc/ {
    proxy_pass http://192.168.0.197/phone-monitor-vnc/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}
197 중계서버에서 스마트폰 서버로 넘기는 예
adb forward tcp:18080 tcp:8080
adb forward tcp:18082 tcp:8082
adb forward tcp:18083 tcp:8083

location /usb-android-galaxy-wide3/ {
    proxy_pass http://127.0.0.1:18083/;
    proxy_set_header Host $host;
}

location /webcam/ {
    proxy_pass http://127.0.0.1:18080/;
}
LG-T540 스마트폰 서버 중계 예
# LG-T540 USB/LAN 포트 예
adb forward tcp:18088 tcp:8088

location /lg-t540-ubuntu-server/ {
    try_files $uri $uri/ /lg-t540-ubuntu-server/index.php?$query_string;
}

location /lg-t540-ubuntu-server/webcam/ {
    proxy_pass http://127.0.0.1:18088/;
}
191 PC 서버 로컬 웹 루트 참고
server_name _ 192.168.0.191 192.168.0.199;
root /var/www/html/192.168.0.191;
index index.html index.php;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
공유기 포워딩 선택 기준
단일 중계: 외부 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, 스마트폰 포워딩, 게시판 운영이 동시에 돌아가도 병목이 줄어듭니다.

sudo apt update
sudo apt install -y openssh-server curl git unzip ufw
ip addr
sudo hostnamectl set-hostname netcity-relay
STEP 02

Nginx, PHP-FPM, DB 설치

웹 포털과 게시판을 PHP로 운영하려면 Nginx와 PHP-FPM, MariaDB/MySQL이 필요합니다. 정적 파일은 Nginx가 처리하고 PHP는 FastCGI로 넘깁니다.

sudo apt install -y nginx php-fpm php-cli php-mysql php-curl php-mbstring php-xml php-gd php-zip mariadb-server
sudo systemctl enable --now nginx
sudo systemctl enable --now mariadb
STEP 03

닷네임 도메인 구입과 DNS 연결

도메인은 닷네임에서 구입한 것을 기준으로 설명합니다. 닷네임의 도메인 레코드 관리(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 호스트에 긴 토큰 값을 넣습니다.

호스트/이름: _acme-challenge
타입: TXT
값: 인증기관이 발급한 긴 TXT 토큰
TTL: 기본값 또는 300

dig TXT _acme-challenge.example.com +short
nslookup -type=txt _acme-challenge.example.com
STEP 05

공유기 443 포트 포워딩

공유기에서는 외부 443 포트만 192.168.0.197의 443으로 보냅니다. 80 포트가 닫혀 있거나 열기 어렵다면 HTTPS만 기본으로 쓰고, 인증서 갱신 방식은 DNS 인증 또는 이미 열려 있는 HTTPS 구조에 맞춥니다.

외부 443/TCP -> 192.168.0.197:443
내부 서비스는 Nginx location/proxy_pass로 분기
STEP 06

Nginx reverse proxy

한 도메인 아래 여러 경로를 만들고, 내부 서비스로 넘깁니다. USB 역데터링을 활용한 스마트폰 서버는 ADB 포워딩이나 내부 IP로 받은 포트에 연결합니다.

location /usb-android-galaxy-wide3/ {
    proxy_pass http://127.0.0.1:18082/;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto https;
}

location /netcity-messenger/ {
    try_files $uri $uri/ /netcity-messenger/index.php?$query_string;
}
STEP 07

HTTPS 인증과 보안

Certbot을 쓰거나, DNS TXT 인증 방식으로 443 HTTPS를 적용합니다. TXT 인증은 80 포트가 닫힌 가정용 환경에서도 도메인 소유 확인을 진행할 수 있어 443 중심 운영과 잘 맞습니다. SSH는 키 기반으로 바꾸고, UFW는 443과 내부 관리에 필요한 포트만 허용합니다.

sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
sudo ufw enable
sudo certbot --nginx -d mobile.example.com
STEP 08

역데터링 스마트폰 서버 연결

스마트폰 서버는 USB 역데터링을 활용한 서버입니다. ADB, USB 역데터링, Termux/Nginx/PHP를 이용하면 스마트폰도 작은 서버 노드가 됩니다. 단, USB 재연결 시 포워딩이 끊기므로 systemd timer로 자동 복구를 둡니다.

adb devices
adb forward tcp:18082 tcp:8082
adb forward tcp:18083 tcp:8083
systemctl enable --now netcity-wide3-recover.timer
STEP 09

운영 점검과 백업

서버 PC는 항상 켜 두고, 로그와 백업을 자동화합니다. 웹진과 게시판 데이터는 DB 덤프와 파일 백업을 함께 가져가야 복구가 쉽습니다.

sudo journalctl -u nginx --since today
sudo tar -czf backup-html.tgz /var/www/html
mysqldump -u root -p DBNAME > DBNAME.sql

관련 자료와 참고 링크

기타 궁금한 사항은 제미나이 AI 또는 ChatGPT에 물어보시면 자세히 알려줍니다.