Mattermost용 NGINX 프록시 서버 설치 및 구성 가이드
기업용 메시징 플랫폼인 Mattermost를 운영할 때 반드시 권장되는 방법이 바로 NGINX 프록시 서버를 앞단에 두는 것입니다. 이렇게 구성하면 보안, 성능, 모니터링 모두를 강화할 수 있습니다. 이 블로그 글에서는 Ubuntu 리눅스를 기준으로 Mattermost에 최적화된 NGINX 프록시 서버를 설치하고, 인증서(SSL)와 HTTP/2를 적용해 실제 서비스 구성까지 따라 할 수 있도록 안내합니다.
1. NGINX 설치
Ubuntu 서버에 NGINX를 설치하는 과정은 아주 간단합니다. 최신 패키지 목록을 받아온 뒤, NGINX를 설치합니다.
sudo apt update
sudo apt install nginx
설치가 완료되면 아래 명령어로 NGINX 상태를 확인할 수 있습니다.
systemctl status nginx
또는 브라우저에서 서버 IP로 접근하거나 curl http://localhost를 통해 Welcome 페이지를 확인하세요.
2. NGINX 기본 관리 명령어
NGINX 서비스는 아래와 같이 제어할 수 있습니다.
sudo systemctl stop nginx # 중지
sudo systemctl start nginx # 시작
sudo systemctl restart nginx # 재시작
sudo systemctl reload nginx # 설정만 다시 불러옴(무중단)
sudo systemctl enable nginx # 부팅시 자동 시작
sudo systemctl disable nginx # 자동 시작 해제
3. Mattermost용 NGINX 프록시 설정
이제 실제로 프록시 역할을 하도록 사이트 설정 파일을 만듭니다.
3-1. mattermost 사이트 설정 파일 생성
sudo touch /etc/nginx/sites-available/mattermost
sudo nano /etc/nginx/sites-available/mattermost
3-2. 기본 프록시 설정 예시 (SSL 미적용 시)
아래 예시는 Mattermost가 8065 포트에서 동작하고, 프록시 서버의 도메인이 mattermost.example.com일 때의 예제입니다.
upstream backend {
server 127.0.0.1:8065;
keepalive 32;
}
server {
listen 80;
server_name mattermost.example.com;
location ~ /api/v[0-9]+/(users/)?websocket$ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 50M;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
client_body_timeout 60s;
send_timeout 300s;
lingering_timeout 5s;
proxy_connect_timeout 90s;
proxy_send_timeout 300s;
proxy_read_timeout 90s;
proxy_http_version 1.1;
proxy_pass http://backend;
}
location / {
client_max_body_size 100M;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_http_version 1.1;
proxy_pass http://backend;
}
}
3-3. 사이트 활성화 및 적용
sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost
sudo rm /etc/nginx/sites-enabled/default # 기본 설정 제거
sudo nginx -t # 설정 테스트
sudo systemctl restart nginx # 설정 적용
4. SSL 인증서(HTTPS) 및 HTTP/2 적용
운영 환경에서는 무조건 HTTPS 및 HTTP/2를 사용해야 합니다. 무료 인증서는 Let's Encrypt의 Certbot으로 쉽게 받을 수 있습니다.
4-1. Certbot 설치 및 인증서 발급
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot certonly --nginx
프롬프트 지시대로 이메일과 도메인 입력 후, 자동으로 인증서가 발급되어 NGINX에 반영됩니다.
4-2. SSL 적용 설정 예시
server {
listen 443 ssl http2;
server_name mattermost.example.com;
ssl_certificate /etc/letsencrypt/live/mattermost.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mattermost.example.com/privkey.pem;
ssl_session_timeout 1d;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:50m;
add_header Strict-Transport-Security max-age=15768000;
# (이하 위의 location 블록 참고)
}
HTTP(80 포트) 트래픽은 HTTPS로 리다이렉트 처리해 주는 것도 중요합니다.
server {
listen 80;
server_name mattermost.example.com;
return 301 https://$server_name$request_uri;
}
5. 방화벽 및 포트 구성
- Mattermost 서버 8065 포트는 NGINX 서버와 관리에만 개방하고 외부 공개를 차단합니다.
- 방화벽(UFW, FirewallD, Security Group 등)에서 80, 443만 오픈, 8065는 내부 접근만 허용하세요.
6. 대규모 스케일링/캐싱(고성능 환경)
동시 사용자 수가 많은 경우에는 NGINX 메인 설정에서 워커 프로세스, 파일 디스크립터, 커넥션 제한 등을 조정하고, 백엔드 서버를 여러 개 등록해 로드밸런싱 할 수 있습니다.
예시: multi-backend 및 캐시 최적화
upstream backend {
server 172.27.205.186:8065 max_fails=0;
server 172.27.213.167:8065 max_fails=0;
keepalive 256;
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=60m use_temp_path=off;
이처럼 여러 대의 Mattermost 서버로 분산시킬 수 있습니다.
7. 자주 묻는 문제 해결
- Too many redirects: Mattermost를 sub-path에서 쓸 때 301 무한 루프가 발생할 수 있어, HEAD 요청별 별도 location 블록 필요.[1]
- Websocket 403: 호스트 헤더를 \$host로, AllowCorsFrom을 config.json에 등록. 로그로 원인 추적.[1]
전체 요약
NGINX는 Mattermost 같은 기업형 메시징 서버에서 보안, 성능, 로드 밸런싱, 모니터링 모두를 강화하며, 실무에서 반드시 필요한 솔루션입니다. 설치부터 SSL 인증, 프록시 구성, 대규모 환경 최적화까지 한 번에 따라할 수 있도록 구성하면 효율적이고 안정적인 서비스 운영이 가능합니다.[1]