Apache 설정에서 특정 포트(5678
번)로 동작하는 애플리케이션을 443번(HTTPS) 포트를 통해 서비스하도록 연결하는 방법에 대해 질문해 주셨군요. 이는 주로 리버스 프록시(Reverse Proxy) 설정을 통해 구현할 수 있습니다.
리버스 프록시는 Apache 서버가 클라이언트로부터 요청을 받아 백엔드 서버(이 경우, 5678번 포트에서 동작하는 n8n)로 전달하고, 백엔드 서버의 응답을 다시 클라이언트에게 전달하는 방식입니다. 이를 통해 443번 포트로 접속하면 내부적으로 5678번 포트의 서비스에 접근할 수 있게 됩니다.
1. 필요한 Apache 모듈 활성화
리버스 프록시 기능을 사용하려면 몇 가지 Apache 모듈을 활성화해야 합니다. 터미널에서 다음 명령어를 실행해주세요.
bash
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel # n8n과 같은 웹소켓 기반 앱에 필요
sudo a2enmod ssl # HTTPS 사용을 위해 필요 (Let's Encrypt 설치 시 이미 활성화되었을 수 있습니다)
sudo a2enmod headers # 프록시 헤더 조작을 위해 필요
sudo a2enmod rewrite # 필요에 따라 리디렉션 등을 위해 필요
모듈 활성화 후 Apache를 재시작합니다.
bash
sudo systemctl restart apache2
2. 가상 호스트(Virtual Host) 설정 수정
SSL 인증서가 적용된 도메인의 가상 호스트 설정 파일(일반적으로 /etc/apache2/sites-available/your-domain-le-ssl.conf
또는 default-ssl.conf
)을 수정해야 합니다. 퐁코님이 Let’s Encrypt를 설치하셨다면 해당 설정 파일에 HTTPS(*:443
) 관련 내용이 포함되어 있을 것입니다.
sudo nano /etc/apache2/sites-available/your-domain-le-ssl.conf
파일을 열어 다음 내용을 <VirtualHost *:443>
블록 안에 추가합니다.
예시: n8n 서비스를 리버스 프록시하는 경우
apache
<VirtualHost *:443>
ServerName your-domain.com # 실제 도메인으로 변경해주세요 (예: n8n.your-domain.com)
ServerAlias www.your-domain.com # 필요한 경우 추가
# 기존 DocumentRoot 설정은 그대로 유지하거나 제거할 수 있습니다.
# 만약 특정 경로(예: /n8n)로 접근할 경우에만 n8n으로 프록시하려면,
# 해당 경로에 대한 DocumentRoot는 필요 없습니다.
# SSL 설정 (Certbot이 자동으로 추가한 내용)
# SSLCertificateFile /etc/letsencrypt/live/your-domain.com/fullchain.pem
# SSLCertificateKeyFile /etc/letsencrypt/live/your-domain.com/privkey.pem
# Include /etc/letsencrypt/options-ssl-apache.conf
# 프록시 설정
ProxyRequests Off
ProxyPreserveHost On
# HTTP 헤더 설정: 백엔드 앱이 HTTPS로 요청 받았음을 알 수 있도록 합니다.
RequestHeader set X-Forwarded-Proto "https"
# 웹소켓 프록시 설정 (n8n처럼 웹소켓을 사용하는 애플리케이션에 필수)
# 클라이언트가 요청하는 경로에 따라 5678번 포트로 프록시
# ProxyPassMatch ^/(.*)$ ws://localhost:5678/$1 # 웹소켓 연결
ProxyPass /ws/ ws://localhost:5678/ws/ # n8n의 웹소켓 경로 예시 (변경될 수 있음)
# HTTP(s) 요청 프록시 설정
# 모든 요청을 5678번 포트로 전달
ProxyPass / http://localhost:5678/
ProxyPassReverse / http://localhost:5678/
# 또는 특정 경로만 프록시하는 경우 (예: your-domain.com/n8n 으로 접근 시)
# ProxyPass /n8n/ http://localhost:5678/
# ProxyPassReverse /n8n/ http://localhost:5678/
# ErrorDocument 404 /404.html (필요에 따라)
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# n8n과 같은 애플리케이션에서는 CORS 관련 설정이 필요할 수 있습니다.
# Header set Access-Control-Allow-Origin "*"
</VirtualHost>
설명:
ServerName your-domain.com
: 이 가상 호스트가 응답할 도메인 이름을 설정합니다. 예를 들어 n8n을n8n.your-domain.com
으로 접근하게 할 것이라면 해당 서브도메인을 여기에 명시하고, DNS 설정도 맞추어야 합니다.ProxyRequests Off
: 이 Apache 서버를 포워드 프록시로 사용하지 않음을 명시합니다. 보안상 항상Off
로 두는 것이 좋습니다.ProxyPreserveHost On
: 클라이언트가 요청한Host
헤더를 백엔드 서버(5678
번 포트)로 그대로 전달합니다. 백엔드 애플리케이션이 호스트 이름에 따라 동작하는 경우 중요합니다.RequestHeader set X-Forwarded-Proto "https"
: 클라이언트가 HTTPS로 요청했음을 백엔드 서버에 알려줍니다. 백엔드 애플리케이션에서 요청 프로토콜을 확인해야 할 때 유용합니다.ProxyPass / http://localhost:5678/
:your-domain.com
으로 들어오는 모든 요청(/
)을http://localhost:5678/
로 프록시합니다.ProxyPassReverse / http://localhost:5678/
: 백엔드 서버에서 보내는 응답 헤더(예:Location
,Content-Location
,URI
)에 있는 URL을 Apache의 URL에 맞게 다시 작성하여 클라이언트에게 올바른 경로를 보여주도록 합니다.ProxyPass /ws/ ws://localhost:5678/ws/
: n8n과 같은 애플리케이션은 웹소켓(WebSocket)을 사용하여 실시간 통신을 합니다.mod_proxy_wstunnel
모듈을 사용하면ws://
또는wss://
스키마로 웹소켓 연결을 프록시할 수 있습니다. n8n의 기본 웹소켓 경로는ws/
일 가능성이 높지만, 정확한 경로를 확인해주세요.
3. Apache 설정 적용 및 재시작
파일을 저장한 후 Apache 설정에 문법적 오류가 없는지 확인합니다.
bash
sudo apachectl configtest
Syntax OK
메시지가 나타나면 Apache 서비스를 재시작하여 변경 사항을 적용합니다.
bash
sudo systemctl restart apache2
이제 웹 브라우저에서 https://your-domain.com
(또는 설정한 서브도메인)으로 접속하시면 5678번 포트에서 동작 중인 n8n 서비스에 연결되는 것을 확인하실 수 있습니다.