NGINX
Nginx를 리버스 프록시 및 HTTPS로 사용하여 LibreChat 배포를 보호하기 위한 단계별 가이드
이 가이드는 HTTPS를 위한 SSL/TLS 인증서로 LibreChat 배포를 보호하고, Nginx를 리버스 프록시로 설정하며, 도메인을 구성하는 필수 단계를 다룹니다.
필수 조건
- 클라우드 서버 (예: AWS, Google Cloud, Azure, Digital Ocean).
- 등록된 도메인 이름.
- 클라우드 서버에 대한 터미널 액세스.
- LibreChat을 호스트에서 직접 실행하는 경우 Node.js
v24.16.0및 npmv11.16.0이 필요합니다.
초기 설정
도메인을 서버로 연결하기
인증서 획득을 진행하기 전에 도메인을 클라우드 서버의 IP 주소로 연결하십시오. 이 단계는 필수적이며, DNS 레코드가 전 세계적으로 전파되는 데 시간이 걸릴 수 있으므로 SSL 인증서 설정보다 먼저 수행되어야 합니다.
- 도메인 등록 업체의 제어판에 로그인하세요.
- DNS 설정으로 이동합니다.
- 도메인을 클라우드 서버의 IP 주소로 가리키는
A record를 생성하세요. - DNS 변경 사항이 전 세계적으로 전파될 때까지 기다리세요(도메인을 핑하여 확인할 수 있습니다:
ping your_domain.com).
SSL/TLS 인증서 획득
LibreChat 애플리케이션을 HTTPS로 보호하려면 SSL/TLS 인증서가 필요합니다. Let's Encrypt에서 무료 인증서를 제공합니다:
-
Certbot 설치:
- Ubuntu의 경우:
sudo apt-get install certbot python3-certbot-nginx - CentOS의 경우:
sudo yum install certbot python2-certbot-nginx
- Ubuntu의 경우:
-
인증서 획득:
sudo certbot --nginx를 실행하여 Nginx용 인증서를 자동으로 획득하고 설치하십시오.- 화면의 지침을 따르세요. Certbot이 정보를 요청하고 유효성 검사 과정을 완료할 것입니다.
- 성공하면 Certbot이 인증서 파일을 저장합니다.
Nginx를 리버스 프록시로 설정하기
Nginx는 리버스 프록시 역할을 하며, 클라이언트 요청을 LibreChat 애플리케이션으로 전달합니다. 두 가지 배포 옵션이 있습니다:
옵션 A: deploy-compose.yml Docker Compose 사용 (권장)
deploy-compose.yml 파일에는 Nginx 컨테이너가 포함되어 있으며, Nginx 설정에 client/nginx.conf 파일을 사용합니다. 하지만 sudo certbot --nginx는 인증서를 호스트 설정으로 추출하므로, 해당 인증서를 Docker 컨테이너로 복제해야 합니다.
client/nginx.conf파일을 도메인 및 인증서 경로로 업데이트하세요.client섹션의deploy-compose.yml을 업데이트하여 호스트에서 인증서 파일을 마운트합니다:
client:
# ...
volumes:
- ./client/nginx.conf:/etc/nginx/conf.d/default.conf
- /etc/letsencrypt/live/<your-domain>:/etc/letsencrypt/live/<your-domain>
- /etc/letsencrypt/archive/<your-domain>:/etc/letsencrypt/archive/<your-domain>
- /etc/letsencrypt/options-ssl-nginx.conf:/etc/letsencrypt/options-ssl-nginx.conf
- /etc/letsencrypt/ssl-dhparams.pem:/etc/letsencrypt/ssl-dhparams.pem- 실행 중인 인스턴스 중단:
npm run stop:deployed - 변경 사항을 새로운 Git 브랜치에 커밋하세요.
- 배포된 인스턴스 리베이스:
npm run rebase:deployed
옵션 B: Docker를 사용하지 않는 호스트 기반 배포
Docker를 사용하지 않는 경우, 호스트에 Nginx를 직접 설치하고 구성할 수 있습니다:
-
Nginx 설치:
- Ubuntu:
sudo apt-get install nginx - CentOS:
sudo yum install nginx
- Ubuntu:
-
Nginx 시작:
sudo systemctl start nginx -
Nginx 설정 파일을 엽니다:
sudo nano /etc/nginx/sites-available/default -
파일 내용을 다음으로 교체하고,
your_domain.com을 귀하의 도메인으로,app_port를 애플리케이션의 포트로 변경하십시오:
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://localhost:app_port;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}- Nginx 설정을 확인하세요:
sudo nginx -t - Nginx 재로드:
sudo systemctl reload nginx
애플리케이션 실행하기
- 애플리케이션 디렉토리로 이동합니다:
cd LibreChat- Docker Compose를 사용하여 애플리케이션을 시작하세요:
sudo docker compose -f ./deploy-compose.yml up -dnginx 사용 시 인증서 갱신
위의 권장 옵션 A를 사용하여 nginx를 설정한 경우, 다음 단계를 따라 인증서를 갱신하십시오:
- 애플리케이션 디렉토리로 이동하세요
cd LibreChat- 실행 중인 Docker 컨테이너를 중지하세요
sudo docker compose -f ./deploy-compose.yml down -d- 인증서 갱신
sudo certbot renew- 애플리케이션을 다시 시작하세요
sudo docker compose -f ./deploy-compose.yml up -d참고: certbot이 호스트의 nginx를 재시작할 수 있습니다. sudo pkill nginx 명령어로 이를 종료할 수 있습니다.
Web Application Firewall
Nginx는 OWASP Core Rule Set (CRS)을 활용하여 웹 애플리케이션 방화벽(WAF) 역할을 하도록 구성할 수 있으며, 이는 일반적인 웹 애플리케이션 취약점 및 공격으로부터 보호하기 위한 강력한 규칙 세트를 제공합니다. LibreChat 배포에 Nginx와 함께 OWASP CRS를 사용하면 추가적인 보호 계층을 더하여 보안을 강화할 수 있습니다.
-
OWASP CRS 설치:
- Ubuntu:
sudo apt-get install nginx-modsecurity-crs
- Ubuntu:
-
Nginx에서 ModSecurity 활성화:
-
Nginx 설정 파일(예:
/etc/nginx/nginx.conf)을 엽니다. -
http블록 내에 다음 줄을 추가하세요:modsecurity on; modsecurity_rules_file /usr/share/nginx/modsecurity-crs/nginx-modsecurity.conf;
-
-
OWASP CRS 구성:
- OWASP CRS 패키지에는 일반적으로 요구 사항에 따라 다양한 설정과 규칙 세트를 조정할 수 있는 구성 파일(예:
/etc/nginx/modsecurity.d/nginx-modsecurity.conf)이 포함되어 있습니다.
- OWASP CRS 패키지에는 일반적으로 요구 사항에 따라 다양한 설정과 규칙 세트를 조정할 수 있는 구성 파일(예:
-
Nginx 다시 로드:
sudo systemctl reload nginx
Nginx 설정에서 OWASP CRS를 활성화하면, 프로젝트에서 제공하는 포괄적인 규칙 세트를 활용하여 SQL 인젝션, 크로스 사이트 스크립팅(XSS), 원격 파일 포함 등 다양한 웹 애플리케이션 취약점과 공격을 탐지하고 완화할 수 있습니다.
정적 파일 캐싱 및 압축
LibreChat은 이제 정적 파일 캐싱 및 압축을 기본적으로 지원합니다. NGINX를 사용하여 압축을 처리하는 경우, 중복 처리를 방지하기 위해 LibreChat에서 압축을 비활성화해야 합니다. LibreChat 구성에서 DISABLE_COMPRESSION 환경 변수를 true로 설정하여 이를 수행할 수 있습니다.
# .env file
DISABLE_COMPRESSION=true이렇게 하면 LibreChat이 정적 파일을 압축하지 않게 되어, NGINX가 더 효율적으로 압축을 처리할 수 있습니다.
LibreChat에서의 정적 파일 처리 및 캐싱 옵션에 대한 자세한 내용은 Static File Handling 문서를 참조하세요.
이 가이드는 어떤가요?