nginx 포트 분리가 필요한 상황부터 먼저 정리
서버를 운영하다 보면 기본 HTTPS 포트인 443은 그대로 유지하면서, 특정 기능이나 별도 서비스만 다른 포트로 분리하고 싶은 경우가 있다. 예를 들어 기존 웹서비스는 443에서 받고, 내부 테스트용 화면이나 별도 API는 8443 같은 포트로 따로 열어두는 식이다.
이 글은 기존 443 서비스는 유지하면서, 추가 포트 8443을 열어 요청을 분리하는 가장 단순한 흐름을 초보자 기준으로 정리한 예시다.
이번 예시에서 만들려는 구조
- 기본 HTTPS 포트 443은 기존 서비스용으로 유지
- 추가 HTTPS 포트 8443은 별도 설정 파일로 분리
- 필요하면 443에서는 특정 경로만 허용하고, 나머지는 막도록 구성
즉, 한 설정 파일에 모든 내용을 뒤섞지 말고 역할별로 포트를 나눠 관리하는 방식이라고 생각하면 이해가 쉽다.
작업 전에 확인할 것
- nginx 설정 파일 위치가 배포 환경과 같은지 확인한다. 보통
/etc/nginx/conf.d/아래를 많이 쓴다. - 8443 포트를 방화벽이나 보안그룹에서 허용해야 외부 접속이 된다.
- SSL 인증서 경로가 새 포트 설정에서도 정상 참조되는지 확인해야 한다.
- 설정 변경 후에는 반드시 문법 검사를 하고 재시작 또는 reload 해야 한다.
1. 기존 설정 파일을 복사해서 새 포트용 파일 만들기
처음부터 새 파일을 전부 쓰기보다, 기존에 잘 동작하던 설정을 복사해서 필요한 부분만 수정하는 편이 안전하다.
cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/custom_port.conf
이렇게 하면 기존 443 설정을 기반으로 8443용 파일을 빠르게 만들 수 있다.
2. 새 포트 설정 파일에서 listen 포트를 바꾸기
복사한 파일을 열고 listen 값을 8443으로 바꾼다. 필요 없는 location이나 주석도 이 파일의 목적에 맞게 정리해준다.
vi /etc/nginx/conf.d/custom_port.conf
server {
listen 8443 ssl;
server_name xxx.xxx.xxx.xxx;
# SSL 인증서 설정은 환경에 맞게 유지
# ssl_certificate ...;
# ssl_certificate_key ...;
location / {
try_files $uri $uri/ /index.php?$args;
}
# 필요한 추가 설정은 여기에 넣는다.
}
기존 메모에는 $arge로 적혀 있었는데, 보통은 $args를 사용한다. 오타가 있으면 요청이 꼬일 수 있으니 꼭 확인하는 게 좋다.
3. 기본 443 설정에서는 어떤 요청만 받을지 명확히 정하기
이제 원래 파일인 default.conf를 열어서 443 포트가 무엇을 처리할지 분명하게 정한다. 포트를 분리할 때 흔한 실수는 443과 8443이 거의 같은 요청을 둘 다 받게 만드는 것이다. 그렇게 되면 왜 분리했는지 의미가 흐려진다.
vi /etc/nginx/conf.d/default.conf
server {
listen 443 ssl;
server_name xxx.xxx.xxx.xxx;
# SSL 인증서 설정은 환경에 맞게 유지
# ssl_certificate ...;
# ssl_certificate_key ...;
# 기존 기본 처리 블록은 목적에 맞게 주석 처리하거나 제거
# location / {
# try_files $uri $uri/ /index.php?$args;
# }
# 루트(/) 접근은 막고 싶다면 404 반환
location = / {
return 404;
}
# 특정 경로만 계속 서비스하고 싶다면 예외로 허용
location = /api/ci {
try_files $uri $uri/ /index.php?$args;
}
# 필요한 추가 설정은 여기에 넣는다.
}
이 예시는 443에서는 루트 접근을 막고, /api/ci 경로만 정상 처리하는 흐름이다. 반대로 443에서 일반 웹서비스를 계속 열고 싶다면 location /를 유지하고, 8443에는 정말 별도 서비스만 올리는 편이 낫다.
4. 설정 문법 검사 후 반영하기
설정 파일을 수정한 뒤에는 바로 재시작하지 말고 먼저 문법 오류부터 확인한다.
nginx -t
문법 검사가 정상이면 아래처럼 reload 또는 restart 한다.
systemctl reload nginx
환경에 따라 서비스명이 다르다면 service nginx reload 또는 운영 중인 방식에 맞는 명령어를 사용하면 된다.
테스트는 이렇게 하면 편하다
https://도메인/접속 시 443이 의도대로 동작하는지 확인https://도메인/api/ci접속 시 예외 경로가 열리는지 확인https://도메인:8443/접속 시 새 포트 서비스가 정상 동작하는지 확인- 브라우저 접속이 안 되면 방화벽, SELinux, 보안그룹, 인증서 설정까지 같이 본다
초보자가 많이 헷갈리는 부분
- 포트만 열면 끝이라고 생각하는 것 → 실제로는 nginx listen, 방화벽, 외부 보안정책이 모두 맞아야 한다.
- 같은 요청을 443과 8443에서 둘 다 받게 만드는 것 → 운영 중 문제를 찾기 어려워진다.
- 오타를 놓치는 것 →
$args같은 변수명 오타 하나로 동작이 달라질 수 있다. - reload 전에 테스트를 안 하는 것 →
nginx -t를 먼저 보는 습관이 중요하다.
마무리
nginx 포트 분리는 복잡한 기술처럼 보이지만, 실제로는 기존 설정을 복사해 역할을 분리하고, 각 포트가 어떤 요청을 받아야 하는지 명확히 정하는 작업에 가깝다. 처음에는 443과 8443처럼 단순한 두 개의 포트만 나눠도 운영 구조가 훨씬 깔끔해진다.
핵심은 세 가지다. 설정 파일을 분리하고, 각 포트의 책임을 명확히 하고, 반영 전 문법 검사를 꼭 하는 것. 이 흐름만 지켜도 포트 분리 작업에서 실수할 확률이 많이 줄어든다.
'IT' 카테고리의 다른 글
| AI 에이전트 팀 운영에서 가장 흔한 실패 5가지 (0) | 2026.03.29 |
|---|---|
| AI 에이전트를 팀처럼 운영하기 전에 정해야 할 3가지 (1) | 2026.03.28 |
| docker 명령어 정리, 초보자가 먼저 익히면 좋은 기본 흐름 (0) | 2021.06.03 |
| JavaScript에서 hash 암호화 구현하는 방법 (md5) (0) | 2021.06.01 |
| centos 7 timezone UTC 변경하기 (0) | 2021.05.28 |