~/tools / 서버에서 로컬 LLM 실행하기 / Ollama nginx Config Generator

Ollama nginx Config Generator — Ollama용 nginx 설정 만들기: HTTPS, 기본 인증, 허용 목록, 스트리밍

Ollama를 프록시 뒤에 두는 nginx server 블록을 만듭니다. 내 인증서를 쓰는 HTTPS, 80번 포트에서의 리디렉션, 기본 인증(basic authentication)을 통한 비밀번호, 주소 허용 목록, 스트리밍되는 답이 작성되는 대로 도착하게 하는 설정을 지정할 수 있습니다. 공식 Ollama FAQ의 프록시 예시에서 출발하며, nginx 문서에 나온 지시어만 사용합니다. 입력한 내용은 브라우저 밖으로 나가지 않습니다.

서버
접속할 수 있는 사람

비밀번호와 허용 목록을 함께 쓰면 요청이 둘 다 통과해야 합니다(nginx의 satisfy 기본값은 all).

스트리밍과 제한

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에 접속할 수 있게 하기
  • 답이 한꺼번에 도착하는 문제나, 큰 모델을 불러오는 중에 연결이 닫히는 문제 해결하기

사용법

  1. 도메인 이름을 입력하고, Ollama가 같은 서버의 11434 포트에 있지 않으면 nginx가 전달할 주소도 입력하세요. HTTPS를 켜고 인증서와 개인 키의 경로를 입력하세요.
  2. 접근을 제한하는 방법을 고르세요. 비밀번호, 허용 주소 목록, 또는 둘 다입니다. 둘 다 쓰면 nginx의 satisfy 지시어 기본값이 all이므로 요청이 둘 다 통과해야 합니다. 스트리밍은 켜 두고, 모델을 불러오는 데 오래 걸리면 타임아웃을 늘리세요.
  3. 설정을 /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를 빼야 합니다.

서버로 전송되는 것이 있나요?

아니요. 설정은 브라우저에서 조립됩니다.

관련 글

관련 도구