~/tools / 서버에서 로컬 LLM 실행하기 / Ollama nginx Config Generator
Ollama nginx Config Generator — Ollama용 nginx 설정 만들기: HTTPS, 기본 인증, 허용 목록, 스트리밍
Ollama를 프록시 뒤에 두는 nginx server 블록을 만듭니다. 내 인증서를 쓰는 HTTPS, 80번 포트에서의 리디렉션, 기본 인증(basic authentication)을 통한 비밀번호, 주소 허용 목록, 스트리밍되는 답이 작성되는 대로 도착하게 하는 설정을 지정할 수 있습니다. 공식 Ollama FAQ의 프록시 예시에서 출발하며, nginx 문서에 나온 지시어만 사용합니다. 입력한 내용은 브라우저 밖으로 나가지 않습니다.
nginx 설정
/etc/nginx/conf.d/ollama.conf로 저장하세요. 지시어의 조합은 우리가 구성한 것이므로, 다시 불러오기 전에 항상 nginx -t를 실행하세요.
server {
listen 80;
server_name ollama.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name ollama.example.com;
ssl_certificate /etc/ssl/ollama.crt;
ssl_certificate_key /etc/ssl/ollama.key;
auth_basic "ollama";
auth_basic_user_file /etc/nginx/ollama.htpasswd;
location / {
proxy_pass http://localhost:11434;
proxy_set_header Host localhost:11434;
proxy_http_version 1.1;
proxy_buffering off;
proxy_read_timeout 300s;
}
}
명령어
htpasswd가 비밀번호를 묻습니다. -c 옵션은 새 파일을 만들고 기존 파일은 다시 쓰이므로, 두 번째 사용자를 추가할 때는 빼세요. Ubuntu에서 htpasswd는 apache2-utils 패키지에 들어 있습니다.
sudo htpasswd -c /etc/nginx/ollama.htpasswd alice sudo nginx -t sudo nginx -s reload
지시어와 기본값은 nginx 문서와 Ollama FAQ의 프록시 예시에 나온 내용을 2026-11-03에 확인한 것입니다. Ollama FAQ: 프록시 서버 / nginx: ngx_http_proxy_module
모든 처리는 브라우저에서 이루어집니다. 입력한 내용은 어디로도 전송되지 않습니다.
Ollama는 기본적으로 서버 자신에서만 수신하며, Ollama FAQ에는 인증에 대한 설명이 없습니다. 다른 컴퓨터에서 접속해야 할 때 FAQ는 nginx 같은 프록시 서버를 안내하며, 요청을 http://localhost:11434로 전달하고 Host 헤더를 localhost:11434로 설정하는 예시를 보여 줍니다. 이 도구는 그 예시에 nginx 문서의 지시어를 더해 만듭니다. 인증서와 키를 쓰는 listen 443 ssl, HTTPS로 리디렉션하는 80번 포트의 server, 비밀번호 파일을 쓰는 auth_basic, 주소를 제한하는 allow와 deny, client_max_body_size, proxy_http_version 1.1, 스트리밍을 위한 proxy_buffering off, 첫 답이 느릴 때를 위한 proxy_read_timeout입니다. 이 조합은 문서의 어느 한 예시가 아니라 우리가 구성한 것이어서 직접 테스트했습니다. 출력은 공식 nginx 1.29.8 이미지와 Ubuntu 24.04의 nginx 1.24.0 모두에서 nginx -t를 통과했습니다. 또 nginx 1.29.8을 거쳐 올바른 비밀번호일 때만 Ollama 0.40.11에 접속할 수 있었고, 스트리밍된 답이 81조각으로 나뉘어 도착했으며, 허용 목록 밖의 주소에서는 403이 반환되었습니다.
이 도구의 핵심 로직은 MIT 라이선스의 오픈 소스로 공개되어 있습니다. github.com/seigo5555/toolkitbox-lib/src/ollama-nginx.ts
이럴 때 사용
- VPS의 Ollama에 노트북이나 다른 서버에서 비밀번호와 HTTPS를 거쳐 접속하기
- 비밀번호에 더해 사무실이나 집 주소에서만 Ollama에 접속할 수 있게 하기
- 답이 한꺼번에 도착하는 문제나, 큰 모델을 불러오는 중에 연결이 닫히는 문제 해결하기
사용법
- 도메인 이름을 입력하고, Ollama가 같은 서버의 11434 포트에 있지 않으면 nginx가 전달할 주소도 입력하세요. HTTPS를 켜고 인증서와 개인 키의 경로를 입력하세요.
- 접근을 제한하는 방법을 고르세요. 비밀번호, 허용 주소 목록, 또는 둘 다입니다. 둘 다 쓰면 nginx의 satisfy 지시어 기본값이 all이므로 요청이 둘 다 통과해야 합니다. 스트리밍은 켜 두고, 모델을 불러오는 데 오래 걸리면 타임아웃을 늘리세요.
- 설정을 /etc/nginx/conf.d/ollama.conf로 저장하고, 표시된 htpasswd 명령으로 비밀번호 파일을 만든 다음 nginx -t를 실행하고 nginx를 다시 불러오세요.
FAQ
왜 Host 헤더는 항상 localhost:11434인가요?
Ollama FAQ의 예시가 그렇게 설정하기 때문입니다. Ollama는 모르는 호스트를 Host 헤더에 담은 요청을 거부합니다. Ollama 0.40.11로 테스트했을 때 Host: ollama.example.com은 403이었고, localhost:11434는 물론 localhost:9999도 200이었습니다. localhost:11434를 보내면 방문자가 어떤 이름으로 접속하든 요청이 받아들여집니다.
왜 proxy_buffering을 off로 하나요?
Ollama는 답을 조금씩 스트리밍합니다. nginx 문서에 따르면 버퍼링을 끄면 응답이 받는 즉시 동기적으로 클라이언트에 전달되고, 켜면 nginx가 먼저 응답을 버퍼에 저장합니다. off로 한 테스트에서는 답이 약 6초에 걸쳐 81조각으로 도착했습니다.
proxy_read_timeout은 무엇을 바꾸나요?
nginx 문서에 따르면 이 타임아웃의 기본값은 60초이며, 응답 전체가 아니라 연속된 두 번의 읽기 사이에만 적용되고, 그 시간 안에 프록시된 서버가 아무것도 보내지 않으면 연결이 닫힙니다. 문서의 내용이 아니라 우리의 해석입니다. 작은 서버에서 모델을 메모리에 불러오는 동안에는 1분 넘게 아무 응답이 없을 수 있으므로, 값을 더 크게 하면 연결이 닫히는 것을 피할 수 있습니다.
nginx는 어느 파일을 읽나요?
공식 nginx 이미지와 Ubuntu 24.04의 nginx 패키지는 모두 nginx.conf의 http 블록 안에 /etc/nginx/conf.d/*.conf를 포함하므로, 그곳에 저장한 파일을 읽습니다. 다른 설치 환경에서는 다른 디렉터리를 쓸 수 있으니 nginx.conf의 include 줄을 확인하세요.
비밀번호 파일은 어떻게 만드나요?
nginx 문서는 Apache의 htpasswd 유틸리티와 openssl passwd를 언급하지만 명령은 제시하지 않습니다. 이 도구는 입력한 파일과 사용자 이름으로 htpasswd -c를 보여 줍니다. Ubuntu에서 htpasswd는 apache2-utils 패키지에 들어 있습니다. Apache 문서에 따르면 -c는 파일을 만들며, 기존 파일은 다시 쓰여 내용이 잘리므로 두 번째 사용자를 추가할 때는 -c를 빼야 합니다.
서버로 전송되는 것이 있나요?
아니요. 설정은 브라우저에서 조립됩니다.
관련 글
- 작은 VPS에서 Ollama의 메모리 사용량 살펴보기Ollama가 메모리에 무엇을 올려 두는지, 얼마나 오래 두는지, 어떤 설정이 이를 바꾸는지 알아봅니다. 공식 FAQ를 바탕으로 한 ollama ps, keep_alive와 각종 제한값입니다.
- 내 VPS의 Ollama에 Dify 연결하기내 VPS에서 Dify를 실행하고 Ollama를 모델로 사용하기: 설치, 플러그인 입력란, Docker 주소 문제, 임베딩을 공식 문서 기준으로 정리했습니다.
- 비싼 PC 없이 로컬 LLM 시작하기: VPS 활용 입문 가이드고성능 PC가 없다면 VPS를 빌려 작은 로컬 LLM을 브라우저에서 써 보세요. 메모리 추정부터 보호된 채팅 화면까지 6단계, 한계도 솔직하게 적었습니다.